@toriistudio/shader-ui 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -37,8 +37,11 @@ __export(src_exports, {
37
37
  FractalFlower: () => FractalFlower,
38
38
  MenuGlitch: () => MenuGlitch,
39
39
  OranoParticles: () => OranoParticles,
40
+ RippleWave: () => RippleWave,
40
41
  ShaderArt: () => ShaderArt,
41
- Snow: () => Snow
42
+ Snow: () => Snow,
43
+ WANDY_HAND_DEFAULTS: () => WANDY_HAND_DEFAULTS,
44
+ WandyHand: () => WandyHand
42
45
  });
43
46
  module.exports = __toCommonJS(src_exports);
44
47
 
@@ -2659,6 +2662,1096 @@ function AnimatedDrawingSVG({
2659
2662
  }
2660
2663
  );
2661
2664
  }
2665
+
2666
+ // src/components/WandyHand.tsx
2667
+ var import_react9 = require("react");
2668
+ var import_opentype = __toESM(require("opentype.js"));
2669
+
2670
+ // src/assets/fonts/waltographUI.ttf
2671
+ var waltographUI_default = "data:font/ttf;base64,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L2xpY2Vuc2VzL25jLXNhLzEuMC9XYWx0b2dyYXBoIFVJQm9sZE1HQkY6IFdhbHQgRGlzbmV5IFNjcmlwdDogMjAwMldhbHRvZ3JhcGggVUkgQm9sZDEuMFdhbHRvZ3JhcGhVSS1Cb2xkaHR0cDovL21pY2tleWF2ZW51ZS5jb20vZm9udHNUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4NCg0KQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4NCg0KMS4gRGVmaW5pdGlvbnMNCg0KICAgMS4gIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLg0KICAgMi4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLg0KICAgMy4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4NCiAgIDQuICJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4NCiAgIDUuICJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLg0KICAgNi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4NCg0KMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLg0KDQozLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6DQoNCiAgIDEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsNCiAgIDIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7DQogICAzLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOw0KICAgNC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7DQoNClRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLg0KDQo0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6DQoNCiAgIDEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4NCiAgIDIuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuDQogICAzLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4NCg0KNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyDQoNCiAgIDEuIEJ5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yJ3Mga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToNCiAgICAgICAgIDEuIExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsNCiAgICAgICAgIDIuIFRoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4NCiAgIDIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4NCg0KNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4NCg0KNy4gVGVybWluYXRpb24NCg0KICAgMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLg0KICAgMi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuDQoNCjguIE1pc2NlbGxhbmVvdXMNCg0KICAgMS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4NCiAgIDIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4NCiAgIDMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4NCiAgIDQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuDQogICA1LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5odHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9uYy1zYS8xLjAvAEQAaQBnAGkAdABpAHoAZQBkACAAZABhAHQAYQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAMgAwADAAMAAtADIAMAAwADQAIABtAGkAYwBrAGUAeQBhAHYAZQBuAHUAZQAuAGMAbwBtACAAOgA6ACAAUwBvAG0AZQAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkACAAOgA6ACAARgBvAHIAIABwAGUAcgBzAG8AbgBhAGwALAAgAG4AbwBuAGMAbwBtAG0AZQByAGMAaQBhAGwAIAB1AHMAZQAgAG8AbgBsAHkAIAA6ADoAIABSAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIABDAHIAZQBhAHQAaQB2AGUAIABDAG8AbQBtAG8AbgBzACAATgBvAG4AQwBvAG0AbQBlAHIAYwBpAGEAbAAtAFMAaABhAHIAZQBBAGwAaQBrAGUAIABsAGkAYwBlAG4AcwBlACAAaAB0AHQAcAA6AC8ALwBjAHIAZQBhAHQAaQB2AGUAYwBvAG0AbQBvAG4AcwAuAG8AcgBnAC8AbABpAGMAZQBuAHMAZQBzAC8AbgBjAC0AcwBhAC8AMQAuADAALwBXAGEAbAB0AG8AZwByAGEAcABoACAAVQBJAEIAbwBsAGQATQBHAEIARgA6ACAAVwBhAGwAdAAgAEQAaQBzAG4AZQB5ACAAUwBjAHIAaQBwAHQAOgAgADIAMAAwADIAVwBhAGwAdABvAGcAcgBhAHAAaAAgAFUASQAgAEIAbwBsAGQAMQAuADAAVwBhAGwAdABvAGcAcgBhAHAAaABVAEkALQBCAG8AbABkAGgAdAB0AHAAOgAvAC8AbQBpAGMAawBlAHkAYQB2AGUAbgB1AGUALgBjAG8AbQAvAGYAbwBuAHQAcwBUAEgARQAgAFcATwBSAEsAIAAoAEEAUwAgAEQARQBGAEkATgBFAEQAIABCAEUATABPAFcAKQAgAEkAUwAgAFAAUgBPAFYASQBEAEUARAAgAFUATgBEAEUAUgAgAFQASABFACAAVABFAFIATQBTACAATwBGACAAVABIAEkAUwAgAEMAUgBFAEEAVABJAFYARQAgAEMATwBNAE0ATwBOAFMAIABQAFUAQgBMAEkAQwAgAEwASQBDAEUATgBTAEUAIAAoACIAQwBDAFAATAAiACAATwBSACAAIgBMAEkAQwBFAE4AUwBFACIAKQAuACAAVABIAEUAIABXAE8AUgBLACAASQBTACAAUABSAE8AVABFAEMAVABFAEQAIABCAFkAIABDAE8AUABZAFIASQBHAEgAVAAgAEEATgBEAC8ATwBSACAATwBUAEgARQBSACAAQQBQAFAATABJAEMAQQBCAEwARQAgAEwAQQBXAC4AIABBAE4AWQAgAFUAUwBFACAATwBGACAAVABIAEUAIABXAE8AUgBLACAATwBUAEgARQBSACAAVABIAEEATgAgAEEAUwAgAEEAVQBUAEgATwBSAEkAWgBFAEQAIABVAE4ARABFAFIAIABUAEgASQBTACAATABJAEMARQBOAFMARQAgAEkAUwAgAFAAUgBPAEgASQBCAEkAVABFAEQALgANAAoADQAKAEIAWQAgAEUAWABFAFIAQwBJAFMASQBOAEcAIABBAE4AWQAgAFIASQBHAEgAVABTACAAVABPACAAVABIAEUAIABXAE8AUgBLACAAUABSAE8AVgBJAEQARQBEACAASABFAFIARQAsACAAWQBPAFUAIABBAEMAQwBFAFAAVAAgAEEATgBEACAAQQBHAFIARQBFACAAVABPACAAQgBFACAAQgBPAFUATgBEACAAQgBZACAAVABIAEUAIABUAEUAUgBNAFMAIABPAEYAIABUAEgASQBTACAATABJAEMARQBOAFMARQAuACAAVABIAEUAIABMAEkAQwBFAE4AUwBPAFIAIABHAFIAQQBOAFQAUwAgAFkATwBVACAAVABIAEUAIABSAEkARwBIAFQAUwAgAEMATwBOAFQAQQBJAE4ARQBEACAASABFAFIARQAgAEkATgAgAEMATwBOAFMASQBEAEUAUgBBAFQASQBPAE4AIABPAEYAIABZAE8AVQBSACAAQQBDAEMARQBQAFQAQQBOAEMARQAgAE8ARgAgAFMAVQBDAEgAIABUAEUAUgBNAFMAIABBAE4ARAAgAEMATwBOAEQASQBUAEkATwBOAFMALgANAAoADQAKADEALgAgAEQAZQBmAGkAbgBpAHQAaQBvAG4AcwANAAoADQAKACAAIAAgADEALgAgACIAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAIgAgAG0AZQBhAG4AcwAgAGEAIAB3AG8AcgBrACwAIABzAHUAYwBoACAAYQBzACAAYQAgAHAAZQByAGkAbwBkAGkAYwBhAGwAIABpAHMAcwB1AGUALAAgAGEAbgB0AGgAbwBsAG8AZwB5ACAAbwByACAAZQBuAGMAeQBjAGwAbwBwAGUAZABpAGEALAAgAGkAbgAgAHcAaABpAGMAaAAgAHQAaABlACAAVwBvAHIAawAgAGkAbgAgAGkAdABzACAAZQBuAHQAaQByAGUAdAB5ACAAaQBuACAAdQBuAG0AbwBkAGkAZgBpAGUAZAAgAGYAbwByAG0ALAAgAGEAbABvAG4AZwAgAHcAaQB0AGgAIABhACAAbgB1AG0AYgBlAHIAIABvAGYAIABvAHQAaABlAHIAIABjAG8AbgB0AHIAaQBiAHUAdABpAG8AbgBzACwAIABjAG8AbgBzAHQAaQB0AHUAdABpAG4AZwAgAHMAZQBwAGEAcgBhAHQAZQAgAGEAbgBkACAAaQBuAGQAZQBwAGUAbgBkAGUAbgB0ACAAdwBvAHIAawBzACAAaQBuACAAdABoAGUAbQBzAGUAbAB2AGUAcwAsACAAYQByAGUAIABhAHMAcwBlAG0AYgBsAGUAZAAgAGkAbgB0AG8AIABhACAAYwBvAGwAbABlAGMAdABpAHYAZQAgAHcAaABvAGwAZQAuACAAQQAgAHcAbwByAGsAIAB0AGgAYQB0ACAAYwBvAG4AcwB0AGkAdAB1AHQAZQBzACAAYQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACAAdwBpAGwAbAAgAG4AbwB0ACAAYgBlACAAYwBvAG4AcwBpAGQAZQByAGUAZAAgAGEAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgACgAYQBzACAAZABlAGYAaQBuAGUAZAAgAGIAZQBsAG8AdwApACAAZgBvAHIAIAB0AGgAZQAgAHAAdQByAHAAbwBzAGUAcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADIALgAgACIARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIgAgAG0AZQBhAG4AcwAgAGEAIAB3AG8AcgBrACAAYgBhAHMAZQBkACAAdQBwAG8AbgAgAHQAaABlACAAVwBvAHIAawAgAG8AcgAgAHUAcABvAG4AIAB0AGgAZQAgAFcAbwByAGsAIABhAG4AZAAgAG8AdABoAGUAcgAgAHAAcgBlAC0AZQB4AGkAcwB0AGkAbgBnACAAdwBvAHIAawBzACwAIABzAHUAYwBoACAAYQBzACAAYQAgAHQAcgBhAG4AcwBsAGEAdABpAG8AbgAsACAAbQB1AHMAaQBjAGEAbAAgAGEAcgByAGEAbgBnAGUAbQBlAG4AdAAsACAAZAByAGEAbQBhAHQAaQB6AGEAdABpAG8AbgAsACAAZgBpAGMAdABpAG8AbgBhAGwAaQB6AGEAdABpAG8AbgAsACAAbQBvAHQAaQBvAG4AIABwAGkAYwB0AHUAcgBlACAAdgBlAHIAcwBpAG8AbgAsACAAcwBvAHUAbgBkACAAcgBlAGMAbwByAGQAaQBuAGcALAAgAGEAcgB0ACAAcgBlAHAAcgBvAGQAdQBjAHQAaQBvAG4ALAAgAGEAYgByAGkAZABnAG0AZQBuAHQALAAgAGMAbwBuAGQAZQBuAHMAYQB0AGkAbwBuACwAIABvAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAGYAbwByAG0AIABpAG4AIAB3AGgAaQBjAGgAIAB0AGgAZQAgAFcAbwByAGsAIABtAGEAeQAgAGIAZQAgAHIAZQBjAGEAcwB0ACwAIAB0AHIAYQBuAHMAZgBvAHIAbQBlAGQALAAgAG8AcgAgAGEAZABhAHAAdABlAGQALAAgAGUAeABjAGUAcAB0ACAAdABoAGEAdAAgAGEAIAB3AG8AcgBrACAAdABoAGEAdAAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAgAHcAaQBsAGwAIABuAG8AdAAgAGIAZQAgAGMAbwBuAHMAaQBkAGUAcgBlAGQAIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIABmAG8AcgAgAHQAaABlACAAcAB1AHIAcABvAHMAZQAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADMALgAgACIATABpAGMAZQBuAHMAbwByACIAIABtAGUAYQBuAHMAIAB0AGgAZQAgAGkAbgBkAGkAdgBpAGQAdQBhAGwAIABvAHIAIABlAG4AdABpAHQAeQAgAHQAaABhAHQAIABvAGYAZgBlAHIAcwAgAHQAaABlACAAVwBvAHIAawAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAANAAuACAAIgBPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAiACAAbQBlAGEAbgBzACAAdABoAGUAIABpAG4AZABpAHYAaQBkAHUAYQBsACAAbwByACAAZQBuAHQAaQB0AHkAIAB3AGgAbwAgAGMAcgBlAGEAdABlAGQAIAB0AGgAZQAgAFcAbwByAGsALgANAAoAIAAgACAANQAuACAAIgBXAG8AcgBrACIAIABtAGUAYQBuAHMAIAB0AGgAZQAgAGMAbwBwAHkAcgBpAGcAaAB0AGEAYgBsAGUAIAB3AG8AcgBrACAAbwBmACAAYQB1AHQAaABvAHIAcwBoAGkAcAAgAG8AZgBmAGUAcgBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADYALgAgACIAWQBvAHUAIgAgAG0AZQBhAG4AcwAgAGEAbgAgAGkAbgBkAGkAdgBpAGQAdQBhAGwAIABvAHIAIABlAG4AdABpAHQAeQAgAGUAeABlAHIAYwBpAHMAaQBuAGcAIAByAGkAZwBoAHQAcwAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAdwBoAG8AIABoAGEAcwAgAG4AbwB0ACAAcAByAGUAdgBpAG8AdQBzAGwAeQAgAHYAaQBvAGwAYQB0AGUAZAAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAsACAAbwByACAAdwBoAG8AIABoAGEAcwAgAHIAZQBjAGUAaQB2AGUAZAAgAGUAeABwAHIAZQBzAHMAIABwAGUAcgBtAGkAcwBzAGkAbwBuACAAZgByAG8AbQAgAHQAaABlACAATABpAGMAZQBuAHMAbwByACAAdABvACAAZQB4AGUAcgBjAGkAcwBlACAAcgBpAGcAaAB0AHMAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAGQAZQBzAHAAaQB0AGUAIABhACAAcAByAGUAdgBpAG8AdQBzACAAdgBpAG8AbABhAHQAaQBvAG4ALgANAAoADQAKADIALgAgAEYAYQBpAHIAIABVAHMAZQAgAFIAaQBnAGgAdABzAC4AIABOAG8AdABoAGkAbgBnACAAaQBuACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABpAHMAIABpAG4AdABlAG4AZABlAGQAIAB0AG8AIAByAGUAZAB1AGMAZQAsACAAbABpAG0AaQB0ACwAIABvAHIAIAByAGUAcwB0AHIAaQBjAHQAIABhAG4AeQAgAHIAaQBnAGgAdABzACAAYQByAGkAcwBpAG4AZwAgAGYAcgBvAG0AIABmAGEAaQByACAAdQBzAGUALAAgAGYAaQByAHMAdAAgAHMAYQBsAGUAIABvAHIAIABvAHQAaABlAHIAIABsAGkAbQBpAHQAYQB0AGkAbwBuAHMAIABvAG4AIAB0AGgAZQAgAGUAeABjAGwAdQBzAGkAdgBlACAAcgBpAGcAaAB0AHMAIABvAGYAIAB0AGgAZQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAbwB3AG4AZQByACAAdQBuAGQAZQByACAAYwBvAHAAeQByAGkAZwBoAHQAIABsAGEAdwAgAG8AcgAgAG8AdABoAGUAcgAgAGEAcABwAGwAaQBjAGEAYgBsAGUAIABsAGEAdwBzAC4ADQAKAA0ACgAzAC4AIABMAGkAYwBlAG4AcwBlACAARwByAGEAbgB0AC4AIABTAHUAYgBqAGUAYwB0ACAAdABvACAAdABoAGUAIAB0AGUAcgBtAHMAIABhAG4AZAAgAGMAbwBuAGQAaQB0AGkAbwBuAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAsACAATABpAGMAZQBuAHMAbwByACAAaABlAHIAZQBiAHkAIABnAHIAYQBuAHQAcwAgAFkAbwB1ACAAYQAgAHcAbwByAGwAZAB3AGkAZABlACwAIAByAG8AeQBhAGwAdAB5AC0AZgByAGUAZQAsACAAbgBvAG4ALQBlAHgAYwBsAHUAcwBpAHYAZQAsACAAcABlAHIAcABlAHQAdQBhAGwAIAAoAGYAbwByACAAdABoAGUAIABkAHUAcgBhAHQAaQBvAG4AIABvAGYAIAB0AGgAZQAgAGEAcABwAGwAaQBjAGEAYgBsAGUAIABjAG8AcAB5AHIAaQBnAGgAdAApACAAbABpAGMAZQBuAHMAZQAgAHQAbwAgAGUAeABlAHIAYwBpAHMAZQAgAHQAaABlACAAcgBpAGcAaAB0AHMAIABpAG4AIAB0AGgAZQAgAFcAbwByAGsAIABhAHMAIABzAHQAYQB0AGUAZAAgAGIAZQBsAG8AdwA6AA0ACgANAAoAIAAgACAAMQAuACAAdABvACAAcgBlAHAAcgBvAGQAdQBjAGUAIAB0AGgAZQAgAFcAbwByAGsALAAgAHQAbwAgAGkAbgBjAG8AcgBwAG8AcgBhAHQAZQAgAHQAaABlACAAVwBvAHIAawAgAGkAbgB0AG8AIABvAG4AZQAgAG8AcgAgAG0AbwByAGUAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawBzACwAIABhAG4AZAAgAHQAbwAgAHIAZQBwAHIAbwBkAHUAYwBlACAAdABoAGUAIABXAG8AcgBrACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIAB0AGgAZQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrAHMAOwANAAoAIAAgACAAMgAuACAAdABvACAAYwByAGUAYQB0AGUAIABhAG4AZAAgAHIAZQBwAHIAbwBkAHUAYwBlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAcwA7AA0ACgAgACAAIAAzAC4AIAB0AG8AIABkAGkAcwB0AHIAaQBiAHUAdABlACAAYwBvAHAAaQBlAHMAIABvAHIAIABwAGgAbwBuAG8AcgBlAGMAbwByAGQAcwAgAG8AZgAsACAAZABpAHMAcABsAGEAeQAgAHAAdQBiAGwAaQBjAGwAeQAsACAAcABlAHIAZgBvAHIAbQAgAHAAdQBiAGwAaQBjAGwAeQAsACAAYQBuAGQAIABwAGUAcgBmAG8AcgBtACAAcAB1AGIAbABpAGMAbAB5ACAAYgB5ACAAbQBlAGEAbgBzACAAbwBmACAAYQAgAGQAaQBnAGkAdABhAGwAIABhAHUAZABpAG8AIAB0AHIAYQBuAHMAbQBpAHMAcwBpAG8AbgAgAHQAaABlACAAVwBvAHIAawAgAGkAbgBjAGwAdQBkAGkAbgBnACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawBzADsADQAKACAAIAAgADQALgAgAHQAbwAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAIABjAG8AcABpAGUAcwAgAG8AcgAgAHAAaABvAG4AbwByAGUAYwBvAHIAZABzACAAbwBmACwAIABkAGkAcwBwAGwAYQB5ACAAcAB1AGIAbABpAGMAbAB5ACwAIABwAGUAcgBmAG8AcgBtACAAcAB1AGIAbABpAGMAbAB5ACwAIABhAG4AZAAgAHAAZQByAGYAbwByAG0AIABwAHUAYgBsAGkAYwBsAHkAIABiAHkAIABtAGUAYQBuAHMAIABvAGYAIABhACAAZABpAGcAaQB0AGEAbAAgAGEAdQBkAGkAbwAgAHQAcgBhAG4AcwBtAGkAcwBzAGkAbwBuACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAcwA7AA0ACgANAAoAVABoAGUAIABhAGIAbwB2AGUAIAByAGkAZwBoAHQAcwAgAG0AYQB5ACAAYgBlACAAZQB4AGUAcgBjAGkAcwBlAGQAIABpAG4AIABhAGwAbAAgAG0AZQBkAGkAYQAgAGEAbgBkACAAZgBvAHIAbQBhAHQAcwAgAHcAaABlAHQAaABlAHIAIABuAG8AdwAgAGsAbgBvAHcAbgAgAG8AcgAgAGgAZQByAGUAYQBmAHQAZQByACAAZABlAHYAaQBzAGUAZAAuACAAVABoAGUAIABhAGIAbwB2AGUAIAByAGkAZwBoAHQAcwAgAGkAbgBjAGwAdQBkAGUAIAB0AGgAZQAgAHIAaQBnAGgAdAAgAHQAbwAgAG0AYQBrAGUAIABzAHUAYwBoACAAbQBvAGQAaQBmAGkAYwBhAHQAaQBvAG4AcwAgAGEAcwAgAGEAcgBlACAAdABlAGMAaABuAGkAYwBhAGwAbAB5ACAAbgBlAGMAZQBzAHMAYQByAHkAIAB0AG8AIABlAHgAZQByAGMAaQBzAGUAIAB0AGgAZQAgAHIAaQBnAGgAdABzACAAaQBuACAAbwB0AGgAZQByACAAbQBlAGQAaQBhACAAYQBuAGQAIABmAG8AcgBtAGEAdABzAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAbgBvAHQAIABlAHgAcAByAGUAcwBzAGwAeQAgAGcAcgBhAG4AdABlAGQAIABiAHkAIABMAGkAYwBlAG4AcwBvAHIAIABhAHIAZQAgAGgAZQByAGUAYgB5ACAAcgBlAHMAZQByAHYAZQBkAC4ADQAKAA0ACgA0AC4AIABSAGUAcwB0AHIAaQBjAHQAaQBvAG4AcwAuACAAVABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAGkAbgAgAFMAZQBjAHQAaQBvAG4AIAAzACAAYQBiAG8AdgBlACAAaQBzACAAZQB4AHAAcgBlAHMAcwBsAHkAIABtAGEAZABlACAAcwB1AGIAagBlAGMAdAAgAHQAbwAgAGEAbgBkACAAbABpAG0AaQB0AGUAZAAgAGIAeQAgAHQAaABlACAAZgBvAGwAbABvAHcAaQBuAGcAIAByAGUAcwB0AHIAaQBjAHQAaQBvAG4AcwA6AA0ACgANAAoAIAAgACAAMQAuACAAWQBvAHUAIABtAGEAeQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAAVwBvAHIAawAgAG8AbgBsAHkAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAFkAbwB1ACAAbQB1AHMAdAAgAGkAbgBjAGwAdQBkAGUAIABhACAAYwBvAHAAeQAgAG8AZgAsACAAbwByACAAdABoAGUAIABVAG4AaQBmAG8AcgBtACAAUgBlAHMAbwB1AHIAYwBlACAASQBkAGUAbgB0AGkAZgBpAGUAcgAgAGYAbwByACwAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAHcAaQB0AGgAIABlAHYAZQByAHkAIABjAG8AcAB5ACAAbwByACAAcABoAG8AbgBvAHIAZQBjAG8AcgBkACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0ALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAG8AZgBmAGUAcgAgAG8AcgAgAGkAbQBwAG8AcwBlACAAYQBuAHkAIAB0AGUAcgBtAHMAIABvAG4AIAB0AGgAZQAgAFcAbwByAGsAIAB0AGgAYQB0ACAAYQBsAHQAZQByACAAbwByACAAcgBlAHMAdAByAGkAYwB0ACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAG8AcgAgAHQAaABlACAAcgBlAGMAaQBwAGkAZQBuAHQAcwAnACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAuACAAWQBvAHUAIABtAGEAeQAgAG4AbwB0ACAAcwB1AGIAbABpAGMAZQBuAHMAZQAgAHQAaABlACAAVwBvAHIAawAuACAAWQBvAHUAIABtAHUAcwB0ACAAawBlAGUAcAAgAGkAbgB0AGEAYwB0ACAAYQBsAGwAIABuAG8AdABpAGMAZQBzACAAdABoAGEAdAAgAHIAZQBmAGUAcgAgAHQAbwAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAYQBuAGQAIAB0AG8AIAB0AGgAZQAgAGQAaQBzAGMAbABhAGkAbQBlAHIAIABvAGYAIAB3AGEAcgByAGEAbgB0AGkAZQBzAC4AIABZAG8AdQAgAG0AYQB5ACAAbgBvAHQAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0AIAB0AGgAZQAgAFcAbwByAGsAIAB3AGkAdABoACAAYQBuAHkAIAB0AGUAYwBoAG4AbwBsAG8AZwBpAGMAYQBsACAAbQBlAGEAcwB1AHIAZQBzACAAdABoAGEAdAAgAGMAbwBuAHQAcgBvAGwAIABhAGMAYwBlAHMAcwAgAG8AcgAgAHUAcwBlACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAaQBuACAAYQAgAG0AYQBuAG4AZQByACAAaQBuAGMAbwBuAHMAaQBzAHQAZQBuAHQAIAB3AGkAdABoACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAEEAZwByAGUAZQBtAGUAbgB0AC4AIABUAGgAZQAgAGEAYgBvAHYAZQAgAGEAcABwAGwAaQBlAHMAIAB0AG8AIAB0AGgAZQAgAFcAbwByAGsAIABhAHMAIABpAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGkAbgAgAGEAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAsACAAYgB1AHQAIAB0AGgAaQBzACAAZABvAGUAcwAgAG4AbwB0ACAAcgBlAHEAdQBpAHIAZQAgAHQAaABlACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAIABhAHAAYQByAHQAIABmAHIAbwBtACAAdABoAGUAIABXAG8AcgBrACAAaQB0AHMAZQBsAGYAIAB0AG8AIABiAGUAIABtAGEAZABlACAAcwB1AGIAagBlAGMAdAAgAHQAbwAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgAgAEkAZgAgAFkAbwB1ACAAYwByAGUAYQB0AGUAIABhACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsALAAgAHUAcABvAG4AIABuAG8AdABpAGMAZQAgAGYAcgBvAG0AIABhAG4AeQAgAEwAaQBjAGUAbgBzAG8AcgAgAFkAbwB1ACAAbQB1AHMAdAAsACAAdABvACAAdABoAGUAIABlAHgAdABlAG4AdAAgAHAAcgBhAGMAdABpAGMAYQBiAGwAZQAsACAAcgBlAG0AbwB2AGUAIABmAHIAbwBtACAAdABoAGUAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAgAGEAbgB5ACAAcgBlAGYAZQByAGUAbgBjAGUAIAB0AG8AIABzAHUAYwBoACAATABpAGMAZQBuAHMAbwByACAAbwByACAAdABoAGUAIABPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAsACAAYQBzACAAcgBlAHEAdQBlAHMAdABlAGQALgAgAEkAZgAgAFkAbwB1ACAAYwByAGUAYQB0AGUAIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsALAAgAHUAcABvAG4AIABuAG8AdABpAGMAZQAgAGYAcgBvAG0AIABhAG4AeQAgAEwAaQBjAGUAbgBzAG8AcgAgAFkAbwB1ACAAbQB1AHMAdAAsACAAdABvACAAdABoAGUAIABlAHgAdABlAG4AdAAgAHAAcgBhAGMAdABpAGMAYQBiAGwAZQAsACAAcgBlAG0AbwB2AGUAIABmAHIAbwBtACAAdABoAGUAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgAGEAbgB5ACAAcgBlAGYAZQByAGUAbgBjAGUAIAB0AG8AIABzAHUAYwBoACAATABpAGMAZQBuAHMAbwByACAAbwByACAAdABoAGUAIABPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAsACAAYQBzACAAcgBlAHEAdQBlAHMAdABlAGQALgANAAoAIAAgACAAMgAuACAAWQBvAHUAIABtAGEAeQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAGEAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgAG8AbgBsAHkAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAFkAbwB1ACAAbQB1AHMAdAAgAGkAbgBjAGwAdQBkAGUAIABhACAAYwBvAHAAeQAgAG8AZgAsACAAbwByACAAdABoAGUAIABVAG4AaQBmAG8AcgBtACAAUgBlAHMAbwB1AHIAYwBlACAASQBkAGUAbgB0AGkAZgBpAGUAcgAgAGYAbwByACwAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAHcAaQB0AGgAIABlAHYAZQByAHkAIABjAG8AcAB5ACAAbwByACAAcABoAG8AbgBvAHIAZQBjAG8AcgBkACAAbwBmACAAZQBhAGMAaAAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0ALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAG8AZgBmAGUAcgAgAG8AcgAgAGkAbQBwAG8AcwBlACAAYQBuAHkAIAB0AGUAcgBtAHMAIABvAG4AIAB0AGgAZQAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrAHMAIAB0AGgAYQB0ACAAYQBsAHQAZQByACAAbwByACAAcgBlAHMAdAByAGkAYwB0ACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAG8AcgAgAHQAaABlACAAcgBlAGMAaQBwAGkAZQBuAHQAcwAnACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAsACAAYQBuAGQAIABZAG8AdQAgAG0AdQBzAHQAIABrAGUAZQBwACAAaQBuAHQAYQBjAHQAIABhAGwAbAAgAG4AbwB0AGkAYwBlAHMAIAB0AGgAYQB0ACAAcgBlAGYAZQByACAAdABvACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABhAG4AZAAgAHQAbwAgAHQAaABlACAAZABpAHMAYwBsAGEAaQBtAGUAcgAgAG8AZgAgAHcAYQByAHIAYQBuAHQAaQBlAHMALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIAB3AGkAdABoACAAYQBuAHkAIAB0AGUAYwBoAG4AbwBsAG8AZwBpAGMAYQBsACAAbQBlAGEAcwB1AHIAZQBzACAAdABoAGEAdAAgAGMAbwBuAHQAcgBvAGwAIABhAGMAYwBlAHMAcwAgAG8AcgAgAHUAcwBlACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAaQBuACAAYQAgAG0AYQBuAG4AZQByACAAaQBuAGMAbwBuAHMAaQBzAHQAZQBuAHQAIAB3AGkAdABoACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAEEAZwByAGUAZQBtAGUAbgB0AC4AIABUAGgAZQAgAGEAYgBvAHYAZQAgAGEAcABwAGwAaQBlAHMAIAB0AG8AIAB0AGgAZQAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIABhACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsALAAgAGIAdQB0ACAAdABoAGkAcwAgAGQAbwBlAHMAIABuAG8AdAAgAHIAZQBxAHUAaQByAGUAIAB0AGgAZQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACAAYQBwAGEAcgB0ACAAZgByAG8AbQAgAHQAaABlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIABpAHQAcwBlAGwAZgAgAHQAbwAgAGIAZQAgAG0AYQBkAGUAIABzAHUAYgBqAGUAYwB0ACAAdABvACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAuAA0ACgAgACAAIAAzAC4AIABZAG8AdQAgAG0AYQB5ACAAbgBvAHQAIABlAHgAZQByAGMAaQBzAGUAIABhAG4AeQAgAG8AZgAgAHQAaABlACAAcgBpAGcAaAB0AHMAIABnAHIAYQBuAHQAZQBkACAAdABvACAAWQBvAHUAIABpAG4AIABTAGUAYwB0AGkAbwBuACAAMwAgAGEAYgBvAHYAZQAgAGkAbgAgAGEAbgB5ACAAbQBhAG4AbgBlAHIAIAB0AGgAYQB0ACAAaQBzACAAcAByAGkAbQBhAHIAaQBsAHkAIABpAG4AdABlAG4AZABlAGQAIABmAG8AcgAgAG8AcgAgAGQAaQByAGUAYwB0AGUAZAAgAHQAbwB3AGEAcgBkACAAYwBvAG0AbQBlAHIAYwBpAGEAbAAgAGEAZAB2AGEAbgB0AGEAZwBlACAAbwByACAAcAByAGkAdgBhAHQAZQAgAG0AbwBuAGUAdABhAHIAeQAgAGMAbwBtAHAAZQBuAHMAYQB0AGkAbwBuAC4AIABUAGgAZQAgAGUAeABjAGgAYQBuAGcAZQAgAG8AZgAgAHQAaABlACAAVwBvAHIAawAgAGYAbwByACAAbwB0AGgAZQByACAAYwBvAHAAeQByAGkAZwBoAHQAZQBkACAAdwBvAHIAawBzACAAYgB5ACAAbQBlAGEAbgBzACAAbwBmACAAZABpAGcAaQB0AGEAbAAgAGYAaQBsAGUALQBzAGgAYQByAGkAbgBnACAAbwByACAAbwB0AGgAZQByAHcAaQBzAGUAIABzAGgAYQBsAGwAIABuAG8AdAAgAGIAZQAgAGMAbwBuAHMAaQBkAGUAcgBlAGQAIAB0AG8AIABiAGUAIABpAG4AdABlAG4AZABlAGQAIABmAG8AcgAgAG8AcgAgAGQAaQByAGUAYwB0AGUAZAAgAHQAbwB3AGEAcgBkACAAYwBvAG0AbQBlAHIAYwBpAGEAbAAgAGEAZAB2AGEAbgB0AGEAZwBlACAAbwByACAAcAByAGkAdgBhAHQAZQAgAG0AbwBuAGUAdABhAHIAeQAgAGMAbwBtAHAAZQBuAHMAYQB0AGkAbwBuACwAIABwAHIAbwB2AGkAZABlAGQAIAB0AGgAZQByAGUAIABpAHMAIABuAG8AIABwAGEAeQBtAGUAbgB0ACAAbwBmACAAYQBuAHkAIABtAG8AbgBlAHQAYQByAHkAIABjAG8AbQBwAGUAbgBzAGEAdABpAG8AbgAgAGkAbgAgAGMAbwBuAG4AZQBjAHQAaQBvAG4AIAB3AGkAdABoACAAdABoAGUAIABlAHgAYwBoAGEAbgBnAGUAIABvAGYAIABjAG8AcAB5AHIAaQBnAGgAdABlAGQAIAB3AG8AcgBrAHMALgANAAoADQAKADUALgAgAFIAZQBwAHIAZQBzAGUAbgB0AGEAdABpAG8AbgBzACwAIABXAGEAcgByAGEAbgB0AGkAZQBzACAAYQBuAGQAIABEAGkAcwBjAGwAYQBpAG0AZQByAA0ACgANAAoAIAAgACAAMQAuACAAQgB5ACAAbwBmAGYAZQByAGkAbgBnACAAdABoAGUAIABXAG8AcgBrACAAZgBvAHIAIABwAHUAYgBsAGkAYwAgAHIAZQBsAGUAYQBzAGUAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAsACAATABpAGMAZQBuAHMAbwByACAAcgBlAHAAcgBlAHMAZQBuAHQAcwAgAGEAbgBkACAAdwBhAHIAcgBhAG4AdABzACAAdABoAGEAdAAsACAAdABvACAAdABoAGUAIABiAGUAcwB0ACAAbwBmACAATABpAGMAZQBuAHMAbwByACcAcwAgAGsAbgBvAHcAbABlAGQAZwBlACAAYQBmAHQAZQByACAAcgBlAGEAcwBvAG4AYQBiAGwAZQAgAGkAbgBxAHUAaQByAHkAOgANAAoAIAAgACAAIAAgACAAIAAgACAAMQAuACAATABpAGMAZQBuAHMAbwByACAAaABhAHMAIABzAGUAYwB1AHIAZQBkACAAYQBsAGwAIAByAGkAZwBoAHQAcwAgAGkAbgAgAHQAaABlACAAVwBvAHIAawAgAG4AZQBjAGUAcwBzAGEAcgB5ACAAdABvACAAZwByAGEAbgB0ACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAcgBpAGcAaAB0AHMAIABoAGUAcgBlAHUAbgBkAGUAcgAgAGEAbgBkACAAdABvACAAcABlAHIAbQBpAHQAIAB0AGgAZQAgAGwAYQB3AGYAdQBsACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAgAHcAaQB0AGgAbwB1AHQAIABZAG8AdQAgAGgAYQB2AGkAbgBnACAAYQBuAHkAIABvAGIAbABpAGcAYQB0AGkAbwBuACAAdABvACAAcABhAHkAIABhAG4AeQAgAHIAbwB5AGEAbAB0AGkAZQBzACwAIABjAG8AbQBwAHUAbABzAG8AcgB5ACAAbABpAGMAZQBuAHMAZQAgAGYAZQBlAHMALAAgAHIAZQBzAGkAZAB1AGEAbABzACAAbwByACAAYQBuAHkAIABvAHQAaABlAHIAIABwAGEAeQBtAGUAbgB0AHMAOwANAAoAIAAgACAAIAAgACAAIAAgACAAMgAuACAAVABoAGUAIABXAG8AcgBrACAAZABvAGUAcwAgAG4AbwB0ACAAaQBuAGYAcgBpAG4AZwBlACAAdABoAGUAIABjAG8AcAB5AHIAaQBnAGgAdAAsACAAdAByAGEAZABlAG0AYQByAGsALAAgAHAAdQBiAGwAaQBjAGkAdAB5ACAAcgBpAGcAaAB0AHMALAAgAGMAbwBtAG0AbwBuACAAbABhAHcAIAByAGkAZwBoAHQAcwAgAG8AcgAgAGEAbgB5ACAAbwB0AGgAZQByACAAcgBpAGcAaAB0ACAAbwBmACAAYQBuAHkAIAB0AGgAaQByAGQAIABwAGEAcgB0AHkAIABvAHIAIABjAG8AbgBzAHQAaQB0AHUAdABlACAAZABlAGYAYQBtAGEAdABpAG8AbgAsACAAaQBuAHYAYQBzAGkAbwBuACAAbwBmACAAcAByAGkAdgBhAGMAeQAgAG8AcgAgAG8AdABoAGUAcgAgAHQAbwByAHQAaQBvAHUAcwAgAGkAbgBqAHUAcgB5ACAAdABvACAAYQBuAHkAIAB0AGgAaQByAGQAIABwAGEAcgB0AHkALgANAAoAIAAgACAAMgAuACAARQBYAEMARQBQAFQAIABBAFMAIABFAFgAUABSAEUAUwBTAEwAWQAgAFMAVABBAFQARQBEACAASQBOACAAVABIAEkAUwAgAEwASQBDAEUATgBTAEUAIABPAFIAIABPAFQASABFAFIAVwBJAFMARQAgAEEARwBSAEUARQBEACAASQBOACAAVwBSAEkAVABJAE4ARwAgAE8AUgAgAFIARQBRAFUASQBSAEUARAAgAEIAWQAgAEEAUABQAEwASQBDAEEAQgBMAEUAIABMAEEAVwAsACAAVABIAEUAIABXAE8AUgBLACAASQBTACAATABJAEMARQBOAFMARQBEACAATwBOACAAQQBOACAAIgBBAFMAIABJAFMAIgAgAEIAQQBTAEkAUwAsACAAVwBJAFQASABPAFUAVAAgAFcAQQBSAFIAQQBOAFQASQBFAFMAIABPAEYAIABBAE4AWQAgAEsASQBOAEQALAAgAEUASQBUAEgARQBSACAARQBYAFAAUgBFAFMAUwAgAE8AUgAgAEkATQBQAEwASQBFAEQAIABJAE4AQwBMAFUARABJAE4ARwAsACAAVwBJAFQASABPAFUAVAAgAEwASQBNAEkAVABBAFQASQBPAE4ALAAgAEEATgBZACAAVwBBAFIAUgBBAE4AVABJAEUAUwAgAFIARQBHAEEAUgBEAEkATgBHACAAVABIAEUAIABDAE8ATgBUAEUATgBUAFMAIABPAFIAIABBAEMAQwBVAFIAQQBDAFkAIABPAEYAIABUAEgARQAgAFcATwBSAEsALgANAAoADQAKADYALgAgAEwAaQBtAGkAdABhAHQAaQBvAG4AIABvAG4AIABMAGkAYQBiAGkAbABpAHQAeQAuACAARQBYAEMARQBQAFQAIABUAE8AIABUAEgARQAgAEUAWABUAEUATgBUACAAUgBFAFEAVQBJAFIARQBEACAAQgBZACAAQQBQAFAATABJAEMAQQBCAEwARQAgAEwAQQBXACwAIABBAE4ARAAgAEUAWABDAEUAUABUACAARgBPAFIAIABEAEEATQBBAEcARQBTACAAQQBSAEkAUwBJAE4ARwAgAEYAUgBPAE0AIABMAEkAQQBCAEkATABJAFQAWQAgAFQATwAgAEEAIABUAEgASQBSAEQAIABQAEEAUgBUAFkAIABSAEUAUwBVAEwAVABJAE4ARwAgAEYAUgBPAE0AIABCAFIARQBBAEMASAAgAE8ARgAgAFQASABFACAAVwBBAFIAUgBBAE4AVABJAEUAUwAgAEkATgAgAFMARQBDAFQASQBPAE4AIAA1ACwAIABJAE4AIABOAE8AIABFAFYARQBOAFQAIABXAEkATABMACAATABJAEMARQBOAFMATwBSACAAQgBFACAATABJAEEAQgBMAEUAIABUAE8AIABZAE8AVQAgAE8ATgAgAEEATgBZACAATABFAEcAQQBMACAAVABIAEUATwBSAFkAIABGAE8AUgAgAEEATgBZACAAUwBQAEUAQwBJAEEATAAsACAASQBOAEMASQBEAEUATgBUAEEATAAsACAAQwBPAE4AUwBFAFEAVQBFAE4AVABJAEEATAAsACAAUABVAE4ASQBUAEkAVgBFACAATwBSACAARQBYAEUATQBQAEwAQQBSAFkAIABEAEEATQBBAEcARQBTACAAQQBSAEkAUwBJAE4ARwAgAE8AVQBUACAATwBGACAAVABIAEkAUwAgAEwASQBDAEUATgBTAEUAIABPAFIAIABUAEgARQAgAFUAUwBFACAATwBGACAAVABIAEUAIABXAE8AUgBLACwAIABFAFYARQBOACAASQBGACAATABJAEMARQBOAFMATwBSACAASABBAFMAIABCAEUARQBOACAAQQBEAFYASQBTAEUARAAgAE8ARgAgAFQASABFACAAUABPAFMAUwBJAEIASQBMAEkAVABZACAATwBGACAAUwBVAEMASAAgAEQAQQBNAEEARwBFAFMALgANAAoADQAKADcALgAgAFQAZQByAG0AaQBuAGEAdABpAG8AbgANAAoADQAKACAAIAAgADEALgAgAFQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAYQBuAGQAIAB0AGgAZQAgAHIAaQBnAGgAdABzACAAZwByAGEAbgB0AGUAZAAgAGgAZQByAGUAdQBuAGQAZQByACAAdwBpAGwAbAAgAHQAZQByAG0AaQBuAGEAdABlACAAYQB1AHQAbwBtAGEAdABpAGMAYQBsAGwAeQAgAHUAcABvAG4AIABhAG4AeQAgAGIAcgBlAGEAYwBoACAAYgB5ACAAWQBvAHUAIABvAGYAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4AIABJAG4AZABpAHYAaQBkAHUAYQBsAHMAIABvAHIAIABlAG4AdABpAHQAaQBlAHMAIAB3AGgAbwAgAGgAYQB2AGUAIAByAGUAYwBlAGkAdgBlAGQAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawBzACAAbwByACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAcwAgAGYAcgBvAG0AIABZAG8AdQAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABoAG8AdwBlAHYAZQByACwAIAB3AGkAbABsACAAbgBvAHQAIABoAGEAdgBlACAAdABoAGUAaQByACAAbABpAGMAZQBuAHMAZQBzACAAdABlAHIAbQBpAG4AYQB0AGUAZAAgAHAAcgBvAHYAaQBkAGUAZAAgAHMAdQBjAGgAIABpAG4AZABpAHYAaQBkAHUAYQBsAHMAIABvAHIAIABlAG4AdABpAHQAaQBlAHMAIAByAGUAbQBhAGkAbgAgAGkAbgAgAGYAdQBsAGwAIABjAG8AbQBwAGwAaQBhAG4AYwBlACAAdwBpAHQAaAAgAHQAaABvAHMAZQAgAGwAaQBjAGUAbgBzAGUAcwAuACAAUwBlAGMAdABpAG8AbgBzACAAMQAsACAAMgAsACAANQAsACAANgAsACAANwAsACAAYQBuAGQAIAA4ACAAdwBpAGwAbAAgAHMAdQByAHYAaQB2AGUAIABhAG4AeQAgAHQAZQByAG0AaQBuAGEAdABpAG8AbgAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADIALgAgAFMAdQBiAGoAZQBjAHQAIAB0AG8AIAB0AGgAZQAgAGEAYgBvAHYAZQAgAHQAZQByAG0AcwAgAGEAbgBkACAAYwBvAG4AZABpAHQAaQBvAG4AcwAsACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAGgAZQByAGUAIABpAHMAIABwAGUAcgBwAGUAdAB1AGEAbAAgACgAZgBvAHIAIAB0AGgAZQAgAGQAdQByAGEAdABpAG8AbgAgAG8AZgAgAHQAaABlACAAYQBwAHAAbABpAGMAYQBiAGwAZQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAaQBuACAAdABoAGUAIABXAG8AcgBrACkALgAgAE4AbwB0AHcAaQB0AGgAcwB0AGEAbgBkAGkAbgBnACAAdABoAGUAIABhAGIAbwB2AGUALAAgAEwAaQBjAGUAbgBzAG8AcgAgAHIAZQBzAGUAcgB2AGUAcwAgAHQAaABlACAAcgBpAGcAaAB0ACAAdABvACAAcgBlAGwAZQBhAHMAZQAgAHQAaABlACAAVwBvAHIAawAgAHUAbgBkAGUAcgAgAGQAaQBmAGYAZQByAGUAbgB0ACAAbABpAGMAZQBuAHMAZQAgAHQAZQByAG0AcwAgAG8AcgAgAHQAbwAgAHMAdABvAHAAIABkAGkAcwB0AHIAaQBiAHUAdABpAG4AZwAgAHQAaABlACAAVwBvAHIAawAgAGEAdAAgAGEAbgB5ACAAdABpAG0AZQA7ACAAcAByAG8AdgBpAGQAZQBkACwAIABoAG8AdwBlAHYAZQByACAAdABoAGEAdAAgAGEAbgB5ACAAcwB1AGMAaAAgAGUAbABlAGMAdABpAG8AbgAgAHcAaQBsAGwAIABuAG8AdAAgAHMAZQByAHYAZQAgAHQAbwAgAHcAaQB0AGgAZAByAGEAdwAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAKABvAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAGwAaQBjAGUAbgBzAGUAIAB0AGgAYQB0ACAAaABhAHMAIABiAGUAZQBuACwAIABvAHIAIABpAHMAIAByAGUAcQB1AGkAcgBlAGQAIAB0AG8AIABiAGUALAAgAGcAcgBhAG4AdABlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACkALAAgAGEAbgBkACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIAB3AGkAbABsACAAYwBvAG4AdABpAG4AdQBlACAAaQBuACAAZgB1AGwAbAAgAGYAbwByAGMAZQAgAGEAbgBkACAAZQBmAGYAZQBjAHQAIAB1AG4AbABlAHMAcwAgAHQAZQByAG0AaQBuAGEAdABlAGQAIABhAHMAIABzAHQAYQB0AGUAZAAgAGEAYgBvAHYAZQAuAA0ACgANAAoAOAAuACAATQBpAHMAYwBlAGwAbABhAG4AZQBvAHUAcwANAAoADQAKACAAIAAgADEALgAgAEUAYQBjAGgAIAB0AGkAbQBlACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACAAbwByACAAcAB1AGIAbABpAGMAbAB5ACAAZABpAGcAaQB0AGEAbABsAHkAIABwAGUAcgBmAG8AcgBtACAAdABoAGUAIABXAG8AcgBrACAAbwByACAAYQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACwAIAB0AGgAZQAgAEwAaQBjAGUAbgBzAG8AcgAgAG8AZgBmAGUAcgBzACAAdABvACAAdABoAGUAIAByAGUAYwBpAHAAaQBlAG4AdAAgAGEAIABsAGkAYwBlAG4AcwBlACAAdABvACAAdABoAGUAIABXAG8AcgBrACAAbwBuACAAdABoAGUAIABzAGEAbQBlACAAdABlAHIAbQBzACAAYQBuAGQAIABjAG8AbgBkAGkAdABpAG8AbgBzACAAYQBzACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAHQAbwAgAFkAbwB1ACAAdQBuAGQAZQByACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAAMgAuACAARQBhAGMAaAAgAHQAaQBtAGUAIABZAG8AdQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0AIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsALAAgAEwAaQBjAGUAbgBzAG8AcgAgAG8AZgBmAGUAcgBzACAAdABvACAAdABoAGUAIAByAGUAYwBpAHAAaQBlAG4AdAAgAGEAIABsAGkAYwBlAG4AcwBlACAAdABvACAAdABoAGUAIABvAHIAaQBnAGkAbgBhAGwAIABXAG8AcgBrACAAbwBuACAAdABoAGUAIABzAGEAbQBlACAAdABlAHIAbQBzACAAYQBuAGQAIABjAG8AbgBkAGkAdABpAG8AbgBzACAAYQBzACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAHQAbwAgAFkAbwB1ACAAdQBuAGQAZQByACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAAMwAuACAASQBmACAAYQBuAHkAIABwAHIAbwB2AGkAcwBpAG8AbgAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAaQBzACAAaQBuAHYAYQBsAGkAZAAgAG8AcgAgAHUAbgBlAG4AZgBvAHIAYwBlAGEAYgBsAGUAIAB1AG4AZABlAHIAIABhAHAAcABsAGkAYwBhAGIAbABlACAAbABhAHcALAAgAGkAdAAgAHMAaABhAGwAbAAgAG4AbwB0ACAAYQBmAGYAZQBjAHQAIAB0AGgAZQAgAHYAYQBsAGkAZABpAHQAeQAgAG8AcgAgAGUAbgBmAG8AcgBjAGUAYQBiAGkAbABpAHQAeQAgAG8AZgAgAHQAaABlACAAcgBlAG0AYQBpAG4AZABlAHIAIABvAGYAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAHcAaQB0AGgAbwB1AHQAIABmAHUAcgB0AGgAZQByACAAYQBjAHQAaQBvAG4AIABiAHkAIAB0AGgAZQAgAHAAYQByAHQAaQBlAHMAIAB0AG8AIAB0AGgAaQBzACAAYQBnAHIAZQBlAG0AZQBuAHQALAAgAHMAdQBjAGgAIABwAHIAbwB2AGkAcwBpAG8AbgAgAHMAaABhAGwAbAAgAGIAZQAgAHIAZQBmAG8AcgBtAGUAZAAgAHQAbwAgAHQAaABlACAAbQBpAG4AaQBtAHUAbQAgAGUAeAB0AGUAbgB0ACAAbgBlAGMAZQBzAHMAYQByAHkAIAB0AG8AIABtAGEAawBlACAAcwB1AGMAaAAgAHAAcgBvAHYAaQBzAGkAbwBuACAAdgBhAGwAaQBkACAAYQBuAGQAIABlAG4AZgBvAHIAYwBlAGEAYgBsAGUALgANAAoAIAAgACAANAAuACAATgBvACAAdABlAHIAbQAgAG8AcgAgAHAAcgBvAHYAaQBzAGkAbwBuACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABzAGgAYQBsAGwAIABiAGUAIABkAGUAZQBtAGUAZAAgAHcAYQBpAHYAZQBkACAAYQBuAGQAIABuAG8AIABiAHIAZQBhAGMAaAAgAGMAbwBuAHMAZQBuAHQAZQBkACAAdABvACAAdQBuAGwAZQBzAHMAIABzAHUAYwBoACAAdwBhAGkAdgBlAHIAIABvAHIAIABjAG8AbgBzAGUAbgB0ACAAcwBoAGEAbABsACAAYgBlACAAaQBuACAAdwByAGkAdABpAG4AZwAgAGEAbgBkACAAcwBpAGcAbgBlAGQAIABiAHkAIAB0AGgAZQAgAHAAYQByAHQAeQAgAHQAbwAgAGIAZQAgAGMAaABhAHIAZwBlAGQAIAB3AGkAdABoACAAcwB1AGMAaAAgAHcAYQBpAHYAZQByACAAbwByACAAYwBvAG4AcwBlAG4AdAAuAA0ACgAgACAAIAA1AC4AIABUAGgAaQBzACAATABpAGMAZQBuAHMAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAHQAaABlACAAZQBuAHQAaQByAGUAIABhAGcAcgBlAGUAbQBlAG4AdAAgAGIAZQB0AHcAZQBlAG4AIAB0AGgAZQAgAHAAYQByAHQAaQBlAHMAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAgAGwAaQBjAGUAbgBzAGUAZAAgAGgAZQByAGUALgAgAFQAaABlAHIAZQAgAGEAcgBlACAAbgBvACAAdQBuAGQAZQByAHMAdABhAG4AZABpAG4AZwBzACwAIABhAGcAcgBlAGUAbQBlAG4AdABzACAAbwByACAAcgBlAHAAcgBlAHMAZQBuAHQAYQB0AGkAbwBuAHMAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAgAG4AbwB0ACAAcwBwAGUAYwBpAGYAaQBlAGQAIABoAGUAcgBlAC4AIABMAGkAYwBlAG4AcwBvAHIAIABzAGgAYQBsAGwAIABuAG8AdAAgAGIAZQAgAGIAbwB1AG4AZAAgAGIAeQAgAGEAbgB5ACAAYQBkAGQAaQB0AGkAbwBuAGEAbAAgAHAAcgBvAHYAaQBzAGkAbwBuAHMAIAB0AGgAYQB0ACAAbQBhAHkAIABhAHAAcABlAGEAcgAgAGkAbgAgAGEAbgB5ACAAYwBvAG0AbQB1AG4AaQBjAGEAdABpAG8AbgAgAGYAcgBvAG0AIABZAG8AdQAuACAAVABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABtAGEAeQAgAG4AbwB0ACAAYgBlACAAbQBvAGQAaQBmAGkAZQBkACAAdwBpAHQAaABvAHUAdAAgAHQAaABlACAAbQB1AHQAdQBhAGwAIAB3AHIAaQB0AHQAZQBuACAAYQBnAHIAZQBlAG0AZQBuAHQAIABvAGYAIAB0AGgAZQAgAEwAaQBjAGUAbgBzAG8AcgAgAGEAbgBkACAAWQBvAHUALgBoAHQAdABwADoALwAvAGMAcgBlAGEAdABpAHYAZQBjAG8AbQBtAG8AbgBzAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBuAGMALQBzAGEALwAxAC4AMAAvAAIAAAAAAAD/6QAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQAAAAMABgAHAAgACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AIgAjAD4APwBAAEEAQgBGAEcASABJAEoASwBMAE4ATwBQAFEAUgBWAFcAWABaAFsAXABdAGEAqwDYALYAtAC1AIcAsgCzANkAjACsAKMAhACFAL0AhgCOAIsAigECAI0BAwDeAKIABAAFAEUAVQC3AAkAsQAgAL4AvwCpAKoAiACkAMQAxQCmAB8AxgAhAF4AYACdAFQAUwBNALsAlgCJALAAkABfAK0AyQDHAK4AYgBjAGoAaQBrAG0AbABuAKAAZABvAMsAZQDIAMoAcQBwAHIAcwDPAMwAzQDOAHUAdAB2AHcA0wDQANEArwBnAJEAegB5AHsAfQB8AKEA1gDUANUAaAB/AH4AgACBALoAZgB4AEQAWQEEAAIBBQEGAOgA8QDyAPMBBwDnAOYA9QD0APYA6wDsAOQA5QDqAO4GbWFjcm9uDnBlcmlvZGNlbnRlcmVkBS5udWxsBGEuMDEEdi4wMgRFdXJvAAAAAAH//wADAAAAAQABAQEBAQAMAPgI/wAIAAf//QAJAAj//QAKAAj//QALAAn//AAMAAr//AANAAv//AAOAAz/+wAPAAz/+wAQAA3/+wARAA7/+wASAA//+gATABD/+gAUABD/+gAVABH/+QAWABL/+QAXABP/+QAYABT/+QAZABT/+AAaABX/+AAbABb/+AAcABf/9wAdABj/9wAeABj/9wAfABn/9gAgABr/9gAhABv/9gAiABz/9gAjABz/9QAkAB3/9QAlAB7/9QAmAB//9AAnACD/9AAoACD/9AApACH/9AAqACL/8wArACP/8wAsACT/8wAtACT/8gAuACX/8gAvACb/8gAwACf/8gAxACj/8QAyACj/8QAzACn/8QA0ACr/8AA1ACv/8AA2ACz/8AA3ACz/7wA4AC3/7wA5AC7/7wA6AC//7wA7ADD/7gA8ADD/7gA9ADH/7gA+ADL/7QA/ADP/7QBAADT/7QBBADT/7QBCADX/7ABDADb/7ABEADf/7ABFADj/6wBGADj/6wBHADn/6wBIADr/6wBJADv/6gBKADz/6gBLADz/6gBMAD3/6QBNAD7/6QBOAD//6QBPAED/6QBQAED/6ABRAEH/6ABSAEL/6ABTAEP/5wBUAET/5wBVAET/5wBWAEX/5gBXAEb/5gBYAEf/5gBZAEj/5gBaAEj/5QBbAEn/5QBcAEr/5QBdAEv/5ABeAEz/5ABfAEz/5ABgAE3/5ABhAE7/4wBiAE//4wBjAFD/4wBkAFD/4gBlAFH/4gBmAFL/4gBnAFP/4gBoAFT/4QBpAFT/4QBqAFX/4QBrAFb/4ABsAFf/4ABtAFj/4ABuAFj/3wBvAFn/3wBwAFr/3wBxAFv/3wByAFz/3gBzAFz/3gB0AF3/3gB1AF7/3QB2AF//3QB3AGD/3QB4AGD/3QB5AGH/3AB6AGL/3AB7AGP/3AB8AGT/2wB9AGT/2wB+AGX/2wB/AGb/2wCAAGf/2gCBAGj/2gCCAGj/2gCDAGn/2QCEAGr/2QCFAGv/2QCGAGz/2QCHAGz/2ACIAG3/2ACJAG7/2ACKAG//1wCLAHD/1wCMAHD/1wCNAHH/1gCOAHL/1gCPAHP/1gCQAHT/1gCRAHT/1QCSAHX/1QCTAHb/1QCUAHf/1ACVAHj/1ACWAHj/1ACXAHn/1ACYAHr/0wCZAHv/0wCaAHz/0wCbAHz/0gCcAH3/0gCdAH7/0gCeAH//0gCfAID/0QCgAID/0QChAIH/0QCiAIL/0ACjAIP/0ACkAIT/0AClAIT/zwCmAIX/zwCnAIb/zwCoAIf/zwCpAIj/zgCqAIj/zgCrAIn/zgCsAIr/zQCtAIv/zQCuAIz/zQCvAIz/zQCwAI3/zACxAI7/zACyAI//zACzAJD/ywC0AJD/ywC1AJH/ywC2AJL/ywC3AJP/ygC4AJT/ygC5AJT/ygC6AJX/yQC7AJb/yQC8AJf/yQC9AJj/yQC+AJj/yAC/AJn/yADAAJr/yADBAJv/xwDCAJz/xwDDAJz/xwDEAJ3/xgDFAJ7/xgDGAJ//xgDHAKD/xgDIAKD/xQDJAKH/xQDKAKL/xQDLAKP/xADMAKT/xADNAKT/xADOAKX/xADPAKb/wwDQAKf/wwDRAKj/wwDSAKj/wgDTAKn/wgDUAKr/wgDVAKv/wgDWAKz/wQDXAKz/wQDYAK3/wQDZAK7/wADaAK//wADbALD/wADcALD/vwDdALH/vwDeALL/vwDfALP/vwDgALT/vgDhALT/vgDiALX/vgDjALb/vQDkALf/vQDlALj/vQDmALj/vQDnALn/vADoALr/vADpALv/vADqALz/uwDrALz/uwDsAL3/uwDtAL7/uwDuAL//ugDvAMD/ugDwAMD/ugDxAMH/uQDyAML/uQDzAMP/uQD0AMT/uAD1AMT/uAD2AMX/uAD3AMb/uAD4AMf/twD5AMj/twD6AMj/twD7AMn/tgD8AMr/tgD9AMv/tgD+AMz/tgD/AMz/tQ==";
2672
+
2673
+ // src/components/WandyHand.tsx
2674
+ var import_jsx_runtime10 = require("react/jsx-runtime");
2675
+ function dist(a, b) {
2676
+ const dx = a.x - b.x;
2677
+ const dy = a.y - b.y;
2678
+ return Math.hypot(dx, dy);
2679
+ }
2680
+ function polylineLength(points) {
2681
+ let L = 0;
2682
+ for (let i = 1; i < points.length; i++) L += dist(points[i - 1], points[i]);
2683
+ return L;
2684
+ }
2685
+ function lerp(a, b, t) {
2686
+ return a + (b - a) * t;
2687
+ }
2688
+ function mulberry32(seed) {
2689
+ let t = seed >>> 0;
2690
+ return function() {
2691
+ t += 1831565813;
2692
+ let r = Math.imul(t ^ t >>> 15, t | 1);
2693
+ r ^= r + Math.imul(r ^ r >>> 7, r | 61);
2694
+ return ((r ^ r >>> 14) >>> 0) / 4294967296;
2695
+ };
2696
+ }
2697
+ function hashStringToSeed(str) {
2698
+ let h = 1779033703 ^ str.length;
2699
+ for (let i = 0; i < str.length; i++) {
2700
+ h = Math.imul(h ^ str.charCodeAt(i), 3432918353);
2701
+ h = h << 13 | h >>> 19;
2702
+ }
2703
+ return h >>> 0;
2704
+ }
2705
+ function randomBetween(rng, min, max) {
2706
+ return min + (max - min) * rng();
2707
+ }
2708
+ function randomOffset(rng, magnitude) {
2709
+ return {
2710
+ x: randomBetween(rng, -magnitude, magnitude),
2711
+ y: randomBetween(rng, -magnitude, magnitude)
2712
+ };
2713
+ }
2714
+ function easeInOut(t) {
2715
+ if (t <= 0) return 0;
2716
+ if (t >= 1) return 1;
2717
+ return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;
2718
+ }
2719
+ function sampleCubic(p0, p1, p2, p3, steps) {
2720
+ const pts = [];
2721
+ for (let i = 0; i <= steps; i++) {
2722
+ const t = i / steps;
2723
+ const mt = 1 - t;
2724
+ const x = mt * mt * mt * p0.x + 3 * mt * mt * t * p1.x + 3 * mt * t * t * p2.x + t * t * t * p3.x;
2725
+ const y = mt * mt * mt * p0.y + 3 * mt * mt * t * p1.y + 3 * mt * t * t * p2.y + t * t * t * p3.y;
2726
+ pts.push({ x, y });
2727
+ }
2728
+ return pts;
2729
+ }
2730
+ function sampleQuadratic(p0, p1, p2, steps) {
2731
+ const pts = [];
2732
+ for (let i = 0; i <= steps; i++) {
2733
+ const t = i / steps;
2734
+ const mt = 1 - t;
2735
+ const x = mt * mt * p0.x + 2 * mt * t * p1.x + t * t * p2.x;
2736
+ const y = mt * mt * p0.y + 2 * mt * t * p1.y + t * t * p2.y;
2737
+ pts.push({ x, y });
2738
+ }
2739
+ return pts;
2740
+ }
2741
+ function pathToPolylines(commands, samplesPerCurve = 16) {
2742
+ const polylines = [];
2743
+ let current = [];
2744
+ let pen = { x: 0, y: 0 };
2745
+ let start = { x: 0, y: 0 };
2746
+ const pushCurrent = () => {
2747
+ if (current.length > 1) polylines.push(current);
2748
+ current = [];
2749
+ };
2750
+ for (const cmd of commands) {
2751
+ if (cmd.type === "M") {
2752
+ pushCurrent();
2753
+ pen = { x: cmd.x, y: cmd.y };
2754
+ start = { ...pen };
2755
+ current.push({ ...pen });
2756
+ } else if (cmd.type === "L") {
2757
+ pen = { x: cmd.x, y: cmd.y };
2758
+ current.push({ ...pen });
2759
+ } else if (cmd.type === "C") {
2760
+ const p0 = pen;
2761
+ const p1 = { x: cmd.x1, y: cmd.y1 };
2762
+ const p2 = { x: cmd.x2, y: cmd.y2 };
2763
+ const p3 = { x: cmd.x, y: cmd.y };
2764
+ const pts = sampleCubic(p0, p1, p2, p3, samplesPerCurve);
2765
+ current.push(...pts.slice(1));
2766
+ pen = p3;
2767
+ } else if (cmd.type === "Q") {
2768
+ const p0 = pen;
2769
+ const p1 = { x: cmd.x1, y: cmd.y1 };
2770
+ const p2 = { x: cmd.x, y: cmd.y };
2771
+ const pts = sampleQuadratic(p0, p1, p2, samplesPerCurve);
2772
+ current.push(...pts.slice(1));
2773
+ pen = p2;
2774
+ } else if (cmd.type === "Z") {
2775
+ current.push({ ...start });
2776
+ pushCurrent();
2777
+ }
2778
+ }
2779
+ pushCurrent();
2780
+ return polylines;
2781
+ }
2782
+ function polygonSignedArea(points) {
2783
+ let area = 0;
2784
+ for (let i = 0; i < points.length; i++) {
2785
+ const a = points[i];
2786
+ const b = points[(i + 1) % points.length];
2787
+ area += a.x * b.y - b.x * a.y;
2788
+ }
2789
+ return area / 2;
2790
+ }
2791
+ function polylineBounds(points) {
2792
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
2793
+ for (const p of points) {
2794
+ minX = Math.min(minX, p.x);
2795
+ minY = Math.min(minY, p.y);
2796
+ maxX = Math.max(maxX, p.x);
2797
+ maxY = Math.max(maxY, p.y);
2798
+ }
2799
+ if (!points.length) return { minX: 0, minY: 0, maxX: 0, maxY: 0 };
2800
+ return { minX, minY, maxX, maxY };
2801
+ }
2802
+ function getEndDirection(points) {
2803
+ for (let i = points.length - 1; i > 0; i--) {
2804
+ const curr = points[i];
2805
+ const prev = points[i - 1];
2806
+ const dx = curr.x - prev.x;
2807
+ const dy = curr.y - prev.y;
2808
+ const mag = Math.hypot(dx, dy);
2809
+ if (mag > 0) return { x: dx / mag, y: dy / mag };
2810
+ }
2811
+ return { x: 1, y: 0 };
2812
+ }
2813
+ function drawPolylineStamped(ctx, pts, visibleLen, totalLen, strokeWidth, strokeColor, baselineOffset, offsets, poolingStrength) {
2814
+ if (pts.length < 2 || visibleLen <= 0 || totalLen <= 0) return;
2815
+ const maxDistance = Math.min(visibleLen, totalLen);
2816
+ if (maxDistance <= 0) return;
2817
+ const spacing = Math.max(0.5, strokeWidth * 0.3);
2818
+ let nextStamp = 0;
2819
+ let segmentIndex = 1;
2820
+ let segmentStartLen = 0;
2821
+ let segmentLength = dist(pts[0], pts[1]);
2822
+ const lastIndex = pts.length - 1;
2823
+ const advanceSegment = () => {
2824
+ while (segmentLength === 0 && segmentIndex < lastIndex) {
2825
+ segmentIndex++;
2826
+ segmentLength = dist(pts[segmentIndex - 1], pts[segmentIndex]);
2827
+ }
2828
+ };
2829
+ advanceSegment();
2830
+ const stampAt = (distance) => {
2831
+ const targetDistance = Math.min(distance, maxDistance);
2832
+ while (segmentIndex < pts.length && targetDistance > segmentStartLen + segmentLength && segmentIndex < lastIndex) {
2833
+ segmentStartLen += segmentLength;
2834
+ segmentIndex++;
2835
+ segmentLength = dist(pts[segmentIndex - 1], pts[segmentIndex]);
2836
+ advanceSegment();
2837
+ }
2838
+ const clampedSegmentLen = segmentLength || 1;
2839
+ const segmentDistance = Math.max(0, targetDistance - segmentStartLen);
2840
+ const t = segmentLength === 0 ? 0 : segmentDistance / clampedSegmentLen;
2841
+ const a = pts[segmentIndex - 1];
2842
+ const b = pts[segmentIndex];
2843
+ const point = {
2844
+ x: lerp(a.x, b.x, t),
2845
+ y: lerp(a.y, b.y, t)
2846
+ };
2847
+ const localProgress = maxDistance > 0 ? Math.min(1, targetDistance / maxDistance) : 1;
2848
+ const delta = localProgress < 0.5 ? {
2849
+ x: lerp(offsets.start.x, offsets.mid.x, localProgress * 2),
2850
+ y: lerp(offsets.start.y, offsets.mid.y, localProgress * 2)
2851
+ } : {
2852
+ x: lerp(offsets.mid.x, offsets.end.x, (localProgress - 0.5) * 2),
2853
+ y: lerp(offsets.mid.y, offsets.end.y, (localProgress - 0.5) * 2)
2854
+ };
2855
+ point.x += baselineOffset.x + delta.x;
2856
+ point.y += baselineOffset.y + delta.y;
2857
+ const pressure = Math.max(0, Math.sin(Math.PI * localProgress));
2858
+ const poolingFactor = localProgress >= 0.7 ? Math.pow((localProgress - 0.7) / 0.3, 1.1) : 0;
2859
+ const radius = Math.max(
2860
+ 0.1,
2861
+ strokeWidth * (0.35 + 0.65 * pressure) * (1 + poolingStrength * poolingFactor)
2862
+ );
2863
+ ctx.moveTo(point.x + radius, point.y);
2864
+ ctx.arc(point.x, point.y, radius, 0, Math.PI * 2);
2865
+ };
2866
+ ctx.save();
2867
+ ctx.fillStyle = strokeColor;
2868
+ ctx.beginPath();
2869
+ while (nextStamp <= maxDistance) {
2870
+ stampAt(nextStamp);
2871
+ nextStamp += spacing;
2872
+ }
2873
+ if (nextStamp - spacing < maxDistance) {
2874
+ stampAt(maxDistance);
2875
+ }
2876
+ ctx.fill();
2877
+ ctx.restore();
2878
+ }
2879
+ function drawOvershootTail(ctx, basePoint, direction, overshootPx, strokeWidth, strokeColor) {
2880
+ if (overshootPx <= 0) return;
2881
+ const dirMag = Math.hypot(direction.x, direction.y) || 1;
2882
+ const dir = { x: direction.x / dirMag, y: direction.y / dirMag };
2883
+ const spacing = Math.max(1, strokeWidth * 0.4);
2884
+ ctx.save();
2885
+ ctx.fillStyle = strokeColor;
2886
+ ctx.beginPath();
2887
+ for (let traveled = 0; traveled <= overshootPx; traveled += spacing) {
2888
+ const progress = Math.min(1, traveled / Math.max(overshootPx, 1e-4));
2889
+ const radius = Math.max(0.1, strokeWidth * (0.25 + 0.35 * (1 - progress)));
2890
+ const x = basePoint.x + dir.x * traveled;
2891
+ const y = basePoint.y + dir.y * traveled;
2892
+ ctx.moveTo(x + radius, y);
2893
+ ctx.arc(x, y, radius, 0, Math.PI * 2);
2894
+ }
2895
+ ctx.fill();
2896
+ ctx.restore();
2897
+ }
2898
+ function createFlourishPath(endPoint, direction, rng) {
2899
+ const dirMag = Math.hypot(direction.x, direction.y);
2900
+ if (!dirMag) return null;
2901
+ const dir = { x: direction.x / dirMag, y: direction.y / dirMag };
2902
+ const normal = { x: -dir.y, y: dir.x };
2903
+ const flourishLen = randomBetween(rng, 6, 14);
2904
+ const curl = randomBetween(rng, -0.6, 0.6);
2905
+ const control = {
2906
+ x: endPoint.x + dir.x * (flourishLen * 0.5) + normal.x * flourishLen * 0.3 * curl,
2907
+ y: endPoint.y + dir.y * (flourishLen * 0.5) + normal.y * flourishLen * 0.3 * curl
2908
+ };
2909
+ const finalPoint = {
2910
+ x: endPoint.x + dir.x * flourishLen + normal.x * flourishLen * 0.15 * curl,
2911
+ y: endPoint.y + dir.y * flourishLen + normal.y * flourishLen * 0.15 * curl
2912
+ };
2913
+ const flourishPoints = sampleQuadratic(endPoint, control, finalPoint, 12);
2914
+ const length = polylineLength(flourishPoints);
2915
+ if (length <= 0) return null;
2916
+ return { points: flourishPoints, length };
2917
+ }
2918
+ var ZERO_OFFSETS = {
2919
+ start: { x: 0, y: 0 },
2920
+ mid: { x: 0, y: 0 },
2921
+ end: { x: 0, y: 0 }
2922
+ };
2923
+ function resolveCurveSamples(controlValue) {
2924
+ return Math.max(2, Math.round(controlValue * controlValue * 0.75));
2925
+ }
2926
+ function computeBounds(polylines) {
2927
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
2928
+ for (const line of polylines) {
2929
+ for (const p of line) {
2930
+ minX = Math.min(minX, p.x);
2931
+ minY = Math.min(minY, p.y);
2932
+ maxX = Math.max(maxX, p.x);
2933
+ maxY = Math.max(maxY, p.y);
2934
+ }
2935
+ }
2936
+ if (minX === Infinity || minY === Infinity || maxX === -Infinity || maxY === -Infinity) {
2937
+ return { minX: 0, minY: 0, maxX: 0, maxY: 0 };
2938
+ }
2939
+ return { minX, minY, maxX, maxY };
2940
+ }
2941
+ function prepareText(font, text, fontSize, samplesPerCurve) {
2942
+ const glyphs = font.stringToGlyphs(text);
2943
+ const characters = Array.from(text);
2944
+ const contours = [];
2945
+ let totalLen = 0;
2946
+ let penX = 0;
2947
+ const scale = fontSize / font.unitsPerEm;
2948
+ let currentWordIndex = 0;
2949
+ let hasGlyphInCurrentWord = false;
2950
+ const lengthThreshold = Math.max(fontSize * 0.65, 20);
2951
+ const areaThreshold = Math.max(fontSize * fontSize * 0.02, 40);
2952
+ const punctuationRegex = /[!?,.;:'"()]/;
2953
+ for (let i = 0; i < glyphs.length; i++) {
2954
+ const glyph = glyphs[i];
2955
+ const char = characters[i] ?? "";
2956
+ const isWhitespaceChar = /\s/.test(char);
2957
+ const isPunctuationGlyph = punctuationRegex.test(char);
2958
+ if (isWhitespaceChar) {
2959
+ if (hasGlyphInCurrentWord) {
2960
+ currentWordIndex++;
2961
+ hasGlyphInCurrentWord = false;
2962
+ }
2963
+ const advanceWidth2 = glyph.advanceWidth && glyph.advanceWidth > 0 ? glyph.advanceWidth : font.unitsPerEm;
2964
+ penX += advanceWidth2 * scale;
2965
+ continue;
2966
+ }
2967
+ hasGlyphInCurrentWord = true;
2968
+ const commands = glyph.getPath(penX, 0, fontSize).commands;
2969
+ const glyphLines = pathToPolylines(commands, samplesPerCurve);
2970
+ for (let contourIndex = 0; contourIndex < glyphLines.length; contourIndex++) {
2971
+ const pl = glyphLines[contourIndex];
2972
+ if (pl.length < 2) continue;
2973
+ const length = polylineLength(pl);
2974
+ if (length <= 0) continue;
2975
+ const bounds2 = polylineBounds(pl);
2976
+ const boundsArea = (bounds2.maxX - bounds2.minX) * (bounds2.maxY - bounds2.minY);
2977
+ const signedArea = polygonSignedArea(pl);
2978
+ const isHole = signedArea < 0;
2979
+ const isSecondary = isPunctuationGlyph || length < lengthThreshold || boundsArea < areaThreshold;
2980
+ contours.push({
2981
+ id: `word${currentWordIndex}-glyph${i}-contour${contourIndex}`,
2982
+ points: pl,
2983
+ length,
2984
+ bounds: bounds2,
2985
+ boundsArea,
2986
+ glyphIndex: i,
2987
+ wordIndex: currentWordIndex,
2988
+ signedArea,
2989
+ isHole,
2990
+ isSecondary,
2991
+ isPunctuation: isPunctuationGlyph
2992
+ });
2993
+ totalLen += length;
2994
+ }
2995
+ const advanceWidth = glyph.advanceWidth && glyph.advanceWidth > 0 ? glyph.advanceWidth : font.unitsPerEm;
2996
+ penX += advanceWidth * scale;
2997
+ if (i < glyphs.length - 1) {
2998
+ const kern = font.getKerningValue(glyph, glyphs[i + 1]);
2999
+ penX += kern * scale;
3000
+ }
3001
+ }
3002
+ const polylines = contours.map((c) => c.points);
3003
+ const bounds = computeBounds(polylines);
3004
+ return { contours, polylines, totalLen, bounds };
3005
+ }
3006
+ function createStrokePlan(contours, totalLen, durationMs, text, imperfectionsEnabled) {
3007
+ if (!contours.length || totalLen <= 0) {
3008
+ return { strokes: [], totalMs: 0 };
3009
+ }
3010
+ const seed = hashStringToSeed(text);
3011
+ const rng = mulberry32(seed || 1);
3012
+ const effectiveDuration = durationMs > 0 ? durationMs : Math.max(totalLen, 1);
3013
+ const baseSpeed = totalLen / Math.max(effectiveDuration, 1);
3014
+ const wordGroups = /* @__PURE__ */ new Map();
3015
+ for (const contour of contours) {
3016
+ const existing = wordGroups.get(contour.wordIndex) ?? {
3017
+ primaries: [],
3018
+ secondaries: [],
3019
+ baselineDrift: { x: 0, y: 0 }
3020
+ };
3021
+ if (!wordGroups.has(contour.wordIndex)) {
3022
+ existing.baselineDrift = imperfectionsEnabled ? {
3023
+ x: randomBetween(rng, -1, 1),
3024
+ y: randomBetween(rng, -1, 1)
3025
+ } : { x: 0, y: 0 };
3026
+ }
3027
+ if (contour.isSecondary) existing.secondaries.push(contour);
3028
+ else existing.primaries.push(contour);
3029
+ wordGroups.set(contour.wordIndex, existing);
3030
+ }
3031
+ const sortContours = (items) => items.sort((a, b) => {
3032
+ if (a.glyphIndex !== b.glyphIndex) {
3033
+ return a.glyphIndex - b.glyphIndex;
3034
+ }
3035
+ if (a.isHole !== b.isHole) {
3036
+ return Number(a.isHole) - Number(b.isHole);
3037
+ }
3038
+ return b.boundsArea - a.boundsArea;
3039
+ });
3040
+ const wordIndices = Array.from(wordGroups.keys()).sort((a, b) => a - b);
3041
+ const strokes = [];
3042
+ let cursor = 0;
3043
+ let lastWordIndex = null;
3044
+ const scheduleContour = (contour, kind, baselineDrift, isLastInWord) => {
3045
+ const length = contour.length;
3046
+ const durationMultiplier = lerp(0.8, 1.2, rng());
3047
+ const baseDuration = baseSpeed > 0 ? length / baseSpeed : length / Math.max(totalLen, 1);
3048
+ const durationMsForStroke = Math.max(baseDuration * durationMultiplier, 24);
3049
+ const isNewWord = lastWordIndex === null || contour.wordIndex !== lastWordIndex;
3050
+ let pauseBeforeMs = 0;
3051
+ if (strokes.length > 0) {
3052
+ if (isNewWord) {
3053
+ pauseBeforeMs = randomBetween(rng, 120, 250);
3054
+ } else if (contour.isPunctuation) {
3055
+ pauseBeforeMs = randomBetween(rng, 60, 140);
3056
+ } else {
3057
+ pauseBeforeMs = randomBetween(rng, 10, 60);
3058
+ if (kind === "secondary") {
3059
+ pauseBeforeMs += randomBetween(rng, 40, 110);
3060
+ }
3061
+ }
3062
+ }
3063
+ cursor += pauseBeforeMs;
3064
+ const startMs = cursor;
3065
+ cursor += durationMsForStroke;
3066
+ const offsets = imperfectionsEnabled ? {
3067
+ start: randomOffset(rng, 0.8),
3068
+ mid: randomOffset(rng, 0.6),
3069
+ end: randomOffset(rng, 0.8)
3070
+ } : ZERO_OFFSETS;
3071
+ const poolingStrength = imperfectionsEnabled ? randomBetween(rng, 0.05, 0.32) : 0;
3072
+ const overshootPx = imperfectionsEnabled ? kind === "secondary" ? randomBetween(rng, 1.5, 4) : randomBetween(rng, 2, 6) : 0;
3073
+ const endDirection = getEndDirection(contour.points);
3074
+ let flourish;
3075
+ if (imperfectionsEnabled && isLastInWord && kind === "main" && rng() < 0.35) {
3076
+ const flourishPath = createFlourishPath(
3077
+ contour.points[contour.points.length - 1],
3078
+ endDirection,
3079
+ rng
3080
+ );
3081
+ if (flourishPath) {
3082
+ flourish = flourishPath;
3083
+ }
3084
+ }
3085
+ strokes.push({
3086
+ id: contour.id,
3087
+ points: contour.points,
3088
+ length,
3089
+ startMs,
3090
+ durationMs: durationMsForStroke,
3091
+ pauseBeforeMs,
3092
+ wordBoundary: isNewWord,
3093
+ kind,
3094
+ wordIndex: contour.wordIndex,
3095
+ baselineDrift,
3096
+ offsets,
3097
+ poolingStrength,
3098
+ overshootPx,
3099
+ endDirection,
3100
+ flourish
3101
+ });
3102
+ lastWordIndex = contour.wordIndex;
3103
+ };
3104
+ for (const wordIndex of wordIndices) {
3105
+ const group = wordGroups.get(wordIndex);
3106
+ if (!group) continue;
3107
+ const orderedPrimaries = sortContours(group.primaries).map((contour) => ({
3108
+ contour,
3109
+ kind: "main"
3110
+ }));
3111
+ const orderedSecondaries = sortContours(group.secondaries).map(
3112
+ (contour) => ({
3113
+ contour,
3114
+ kind: "secondary"
3115
+ })
3116
+ );
3117
+ const orderedContours = [...orderedPrimaries, ...orderedSecondaries];
3118
+ orderedContours.forEach(({ contour, kind }, idx) => {
3119
+ const isLastInWord = idx === orderedContours.length - 1;
3120
+ scheduleContour(contour, kind, group.baselineDrift, isLastInWord);
3121
+ });
3122
+ }
3123
+ const totalMs = cursor;
3124
+ return { strokes, totalMs };
3125
+ }
3126
+ var WANDY_HAND_DEFAULTS = {
3127
+ fontSize: 160,
3128
+ durationMs: 2200,
3129
+ strokeWidth: 3.2,
3130
+ penOpacity: 1,
3131
+ strokeColor: "#fff",
3132
+ lineCap: "round",
3133
+ lineJoin: "round",
3134
+ samplesPerCurve: 5,
3135
+ strokeMode: "outline",
3136
+ canvasPadding: 8,
3137
+ backgroundColor: "transparent",
3138
+ imperfectionsEnabled: false,
3139
+ animate: true
3140
+ };
3141
+ function WandyHand({
3142
+ text = "",
3143
+ fontUrl,
3144
+ fontSize,
3145
+ durationMs = WANDY_HAND_DEFAULTS.durationMs,
3146
+ strokeWidth = WANDY_HAND_DEFAULTS.strokeWidth,
3147
+ penOpacity = WANDY_HAND_DEFAULTS.penOpacity,
3148
+ strokeColor = WANDY_HAND_DEFAULTS.strokeColor,
3149
+ lineCap = WANDY_HAND_DEFAULTS.lineCap,
3150
+ lineJoin = WANDY_HAND_DEFAULTS.lineJoin,
3151
+ samplesPerCurve = WANDY_HAND_DEFAULTS.samplesPerCurve,
3152
+ strokeMode = WANDY_HAND_DEFAULTS.strokeMode,
3153
+ canvasPadding = WANDY_HAND_DEFAULTS.canvasPadding,
3154
+ backgroundColor = WANDY_HAND_DEFAULTS.backgroundColor,
3155
+ imperfectionsEnabled = WANDY_HAND_DEFAULTS.imperfectionsEnabled,
3156
+ size,
3157
+ animate = WANDY_HAND_DEFAULTS.animate,
3158
+ onDrawn
3159
+ }) {
3160
+ const canvasRef = (0, import_react9.useRef)(null);
3161
+ const rafRef = (0, import_react9.useRef)(null);
3162
+ const [font, setFont] = (0, import_react9.useState)(null);
3163
+ const resolvedFontUrl = fontUrl ?? waltographUI_default;
3164
+ const onDrawnRef = (0, import_react9.useRef)(onDrawn);
3165
+ const drawRunRef = (0, import_react9.useRef)(0);
3166
+ const drawNotifiedRef = (0, import_react9.useRef)(false);
3167
+ const resolvedFontSize = typeof fontSize === "number" && fontSize > 0 ? fontSize : 160;
3168
+ const sizeValue = size !== void 0 ? typeof size === "number" ? `${Math.max(0, size)}px` : `${size}` : null;
3169
+ const LINE_CAP_MAP = {
3170
+ round: "round",
3171
+ butt: "butt",
3172
+ square: "square"
3173
+ };
3174
+ const LINE_JOIN_MAP = {
3175
+ round: "round",
3176
+ miter: "miter",
3177
+ bevel: "bevel"
3178
+ };
3179
+ const STROKE_MODE_MAP = {
3180
+ outline: "outline",
3181
+ "outline reveal": "outline",
3182
+ "full stroke": "full",
3183
+ full: "full"
3184
+ };
3185
+ const normalizeLineCap = (value) => {
3186
+ if (!value) return "round";
3187
+ const lower = value.toLowerCase();
3188
+ return LINE_CAP_MAP[lower] ?? "round";
3189
+ };
3190
+ const normalizeLineJoin = (value) => {
3191
+ if (!value) return "round";
3192
+ const lower = value.toLowerCase();
3193
+ return LINE_JOIN_MAP[lower] ?? "round";
3194
+ };
3195
+ const normalizeStrokeMode = (value) => {
3196
+ if (!value) return "outline";
3197
+ const lower = value.toLowerCase();
3198
+ return STROKE_MODE_MAP[lower] ?? "outline";
3199
+ };
3200
+ const resolvedLineCap = normalizeLineCap(lineCap);
3201
+ const resolvedLineJoin = normalizeLineJoin(lineJoin);
3202
+ const resolvedStrokeMode = normalizeStrokeMode(strokeMode);
3203
+ const resolvedSamplesPerCurve = resolveCurveSamples(samplesPerCurve);
3204
+ (0, import_react9.useEffect)(() => {
3205
+ onDrawnRef.current = onDrawn;
3206
+ }, [onDrawn]);
3207
+ (0, import_react9.useEffect)(() => {
3208
+ let cancelled = false;
3209
+ const loadFont = async () => {
3210
+ try {
3211
+ const response = await fetch(resolvedFontUrl);
3212
+ if (!response.ok) {
3213
+ throw new Error(
3214
+ `Failed to load font (${response.status} ${response.statusText})`
3215
+ );
3216
+ }
3217
+ const contentType = response.headers.get("content-type") ?? "";
3218
+ if (contentType && !contentType.includes("font") && !contentType.includes("application/octet-stream") && !resolvedFontUrl.startsWith("data:")) {
3219
+ throw new Error(
3220
+ `Unexpected font content-type "${contentType}" for ${resolvedFontUrl}`
3221
+ );
3222
+ }
3223
+ const buffer = await response.arrayBuffer();
3224
+ const loaded = import_opentype.default.parse(buffer);
3225
+ if (!cancelled) setFont(loaded);
3226
+ } catch (err) {
3227
+ if (!cancelled) {
3228
+ console.error(err);
3229
+ setFont(null);
3230
+ }
3231
+ }
3232
+ };
3233
+ loadFont();
3234
+ return () => {
3235
+ cancelled = true;
3236
+ };
3237
+ }, [resolvedFontUrl]);
3238
+ const prepared = (0, import_react9.useMemo)(() => {
3239
+ if (!font) return null;
3240
+ const safeText = typeof text === "string" ? text : "";
3241
+ const safe = safeText.trim().length ? safeText : " ";
3242
+ return prepareText(font, safe, resolvedFontSize, resolvedSamplesPerCurve);
3243
+ }, [font, text, resolvedFontSize, resolvedSamplesPerCurve]);
3244
+ const aspectRatio = (0, import_react9.useMemo)(() => {
3245
+ if (!prepared) return null;
3246
+ const width = prepared.bounds.maxX - prepared.bounds.minX;
3247
+ const height = prepared.bounds.maxY - prepared.bounds.minY;
3248
+ return width > 0 && height > 0 ? width / height : null;
3249
+ }, [prepared]);
3250
+ const strokePlan = (0, import_react9.useMemo)(() => {
3251
+ if (!prepared) return null;
3252
+ const safeText = typeof text === "string" ? text : "";
3253
+ const safe = safeText.trim().length ? safeText : " ";
3254
+ return createStrokePlan(
3255
+ prepared.contours,
3256
+ prepared.totalLen,
3257
+ durationMs,
3258
+ safe,
3259
+ imperfectionsEnabled
3260
+ );
3261
+ }, [prepared, durationMs, text, imperfectionsEnabled]);
3262
+ (0, import_react9.useEffect)(() => {
3263
+ const canvas = canvasRef.current;
3264
+ if (!canvas || !prepared || !strokePlan) return;
3265
+ drawRunRef.current += 1;
3266
+ drawNotifiedRef.current = false;
3267
+ const ctx = canvas.getContext("2d");
3268
+ if (!ctx) return;
3269
+ const safeCanvas = canvas;
3270
+ const safeCtx = ctx;
3271
+ const { polylines, bounds } = prepared;
3272
+ const { strokes, totalMs } = strokePlan;
3273
+ const textW = bounds.maxX - bounds.minX;
3274
+ const textH = bounds.maxY - bounds.minY;
3275
+ const targetAspect = textW > 0 && textH > 0 ? textW / textH : null;
3276
+ function resize() {
3277
+ const dpr = Math.max(1, window.devicePixelRatio || 1);
3278
+ const host = safeCanvas.parentElement ?? safeCanvas;
3279
+ const rect = host.getBoundingClientRect();
3280
+ let nextWidth = rect.width;
3281
+ let nextHeight = rect.height;
3282
+ if (targetAspect) {
3283
+ const rectAspect = rect.width / Math.max(rect.height, 1);
3284
+ if (rectAspect > targetAspect) {
3285
+ nextWidth = rect.height * targetAspect;
3286
+ nextHeight = rect.height;
3287
+ } else {
3288
+ nextWidth = rect.width;
3289
+ nextHeight = rect.width / targetAspect;
3290
+ }
3291
+ }
3292
+ safeCanvas.style.width = `${Math.max(1, nextWidth)}px`;
3293
+ safeCanvas.style.height = `${Math.max(1, nextHeight)}px`;
3294
+ safeCanvas.width = Math.floor(Math.max(1, nextWidth) * dpr);
3295
+ safeCanvas.height = Math.floor(Math.max(1, nextHeight) * dpr);
3296
+ safeCtx.setTransform(dpr, 0, 0, dpr, 0, 0);
3297
+ if (!animate) {
3298
+ renderFrame(Number.POSITIVE_INFINITY, 1);
3299
+ rafRef.current = null;
3300
+ return;
3301
+ }
3302
+ if (rafRef.current === null) {
3303
+ rafRef.current = requestAnimationFrame(draw);
3304
+ }
3305
+ }
3306
+ resize();
3307
+ window.addEventListener("resize", resize);
3308
+ const start = performance.now();
3309
+ const totalTimeline = totalMs > 0 ? totalMs : Math.max(durationMs, 1);
3310
+ function renderFrame(timelineElapsed, timelineProgress) {
3311
+ safeCtx.clearRect(0, 0, safeCanvas.width, safeCanvas.height);
3312
+ safeCtx.lineCap = resolvedLineCap;
3313
+ safeCtx.lineJoin = resolvedLineJoin;
3314
+ safeCtx.lineWidth = strokeWidth;
3315
+ safeCtx.globalAlpha = penOpacity;
3316
+ safeCtx.strokeStyle = strokeColor;
3317
+ const pad = canvasPadding;
3318
+ const viewW = safeCanvas.clientWidth;
3319
+ const viewH = safeCanvas.clientHeight;
3320
+ const scaleToFit = Math.min(
3321
+ (viewW - pad * 2) / (textW || 1),
3322
+ (viewH - pad * 2) / (textH || 1)
3323
+ );
3324
+ const scale = sizeValue === null ? scaleToFit : Math.min(1, scaleToFit);
3325
+ const cx = viewW / 2;
3326
+ const cy = viewH / 2;
3327
+ safeCtx.save();
3328
+ safeCtx.translate(cx, cy);
3329
+ safeCtx.scale(scale, scale);
3330
+ safeCtx.translate(-(bounds.minX + textW / 2), -(bounds.minY + textH / 2));
3331
+ const filledContours = [];
3332
+ for (const stroke of strokes) {
3333
+ if (!stroke.points.length || stroke.length <= 0) continue;
3334
+ const strokeStart = stroke.startMs;
3335
+ const strokeEnd = stroke.startMs + stroke.durationMs;
3336
+ if (timelineElapsed >= strokeEnd) {
3337
+ drawPolylineStamped(
3338
+ safeCtx,
3339
+ stroke.points,
3340
+ stroke.length,
3341
+ stroke.length,
3342
+ strokeWidth,
3343
+ strokeColor,
3344
+ stroke.baselineDrift,
3345
+ stroke.offsets,
3346
+ stroke.poolingStrength
3347
+ );
3348
+ if (resolvedStrokeMode === "full") {
3349
+ filledContours.push(stroke.points);
3350
+ }
3351
+ const lastPoint = stroke.points[stroke.points.length - 1];
3352
+ const tipPoint = {
3353
+ x: lastPoint.x + stroke.baselineDrift.x + stroke.offsets.end.x,
3354
+ y: lastPoint.y + stroke.baselineDrift.y + stroke.offsets.end.y
3355
+ };
3356
+ drawOvershootTail(
3357
+ safeCtx,
3358
+ tipPoint,
3359
+ stroke.endDirection,
3360
+ stroke.overshootPx,
3361
+ strokeWidth,
3362
+ strokeColor
3363
+ );
3364
+ if (stroke.flourish) {
3365
+ drawPolylineStamped(
3366
+ safeCtx,
3367
+ stroke.flourish.points,
3368
+ stroke.flourish.length,
3369
+ stroke.flourish.length,
3370
+ strokeWidth * 0.9,
3371
+ strokeColor,
3372
+ stroke.baselineDrift,
3373
+ ZERO_OFFSETS,
3374
+ stroke.poolingStrength * 0.5
3375
+ );
3376
+ }
3377
+ continue;
3378
+ }
3379
+ if (timelineElapsed >= strokeStart) {
3380
+ const localElapsed = timelineElapsed - strokeStart;
3381
+ const localTLinear = Math.min(
3382
+ 1,
3383
+ localElapsed / Math.max(stroke.durationMs, 1)
3384
+ );
3385
+ const easedT = easeInOut(localTLinear);
3386
+ const partialLen = stroke.length * easedT;
3387
+ drawPolylineStamped(
3388
+ safeCtx,
3389
+ stroke.points,
3390
+ partialLen,
3391
+ stroke.length,
3392
+ strokeWidth,
3393
+ strokeColor,
3394
+ stroke.baselineDrift,
3395
+ stroke.offsets,
3396
+ stroke.poolingStrength
3397
+ );
3398
+ }
3399
+ break;
3400
+ }
3401
+ if (resolvedStrokeMode === "full") {
3402
+ const contoursToFill = timelineProgress >= 1 ? polylines : filledContours;
3403
+ if (contoursToFill.length) {
3404
+ safeCtx.save();
3405
+ safeCtx.fillStyle = strokeColor;
3406
+ safeCtx.beginPath();
3407
+ for (const pl of contoursToFill) {
3408
+ if (!pl.length) continue;
3409
+ safeCtx.moveTo(pl[0].x, pl[0].y);
3410
+ for (let i = 1; i < pl.length; i++) {
3411
+ safeCtx.lineTo(pl[i].x, pl[i].y);
3412
+ }
3413
+ safeCtx.closePath();
3414
+ }
3415
+ safeCtx.fill("evenodd");
3416
+ safeCtx.restore();
3417
+ }
3418
+ }
3419
+ safeCtx.restore();
3420
+ if (timelineProgress >= 1 && !drawNotifiedRef.current) {
3421
+ drawNotifiedRef.current = true;
3422
+ onDrawnRef.current?.();
3423
+ }
3424
+ }
3425
+ function draw(now) {
3426
+ const elapsedRaw = now - start;
3427
+ const timelineElapsed = Math.min(elapsedRaw, totalTimeline);
3428
+ const timelineProgress = totalTimeline > 0 ? timelineElapsed / totalTimeline : 1;
3429
+ renderFrame(timelineElapsed, timelineProgress);
3430
+ if (timelineProgress < 1) {
3431
+ rafRef.current = requestAnimationFrame(draw);
3432
+ } else {
3433
+ rafRef.current = null;
3434
+ }
3435
+ }
3436
+ if (rafRef.current) cancelAnimationFrame(rafRef.current);
3437
+ if (animate) {
3438
+ rafRef.current = requestAnimationFrame(draw);
3439
+ } else {
3440
+ renderFrame(Number.POSITIVE_INFINITY, 1);
3441
+ rafRef.current = null;
3442
+ }
3443
+ return () => {
3444
+ window.removeEventListener("resize", resize);
3445
+ if (rafRef.current) cancelAnimationFrame(rafRef.current);
3446
+ rafRef.current = null;
3447
+ };
3448
+ }, [
3449
+ prepared,
3450
+ strokePlan,
3451
+ durationMs,
3452
+ strokeWidth,
3453
+ strokeColor,
3454
+ canvasPadding,
3455
+ resolvedLineCap,
3456
+ resolvedLineJoin,
3457
+ penOpacity,
3458
+ resolvedStrokeMode,
3459
+ sizeValue,
3460
+ animate
3461
+ ]);
3462
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3463
+ "div",
3464
+ {
3465
+ className: "flex w-full flex-col text-white",
3466
+ style: {
3467
+ background: backgroundColor,
3468
+ ...sizeValue ? { width: sizeValue } : null,
3469
+ ...aspectRatio ? { aspectRatio } : null
3470
+ },
3471
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative flex flex-1 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("canvas", { ref: canvasRef, style: { display: "block" } }) })
3472
+ }
3473
+ );
3474
+ }
3475
+
3476
+ // src/components/RippleWave.tsx
3477
+ var import_react11 = require("react");
3478
+ var THREE9 = __toESM(require("three"));
3479
+
3480
+ // src/components/ShaderPass.tsx
3481
+ var import_react10 = require("react");
3482
+ var THREE8 = __toESM(require("three"));
3483
+ var import_jsx_runtime11 = require("react/jsx-runtime");
3484
+ var buildQuadGeometry = () => {
3485
+ const geom = new THREE8.BufferGeometry();
3486
+ const positions = new Float32Array([
3487
+ -1,
3488
+ -1,
3489
+ 0,
3490
+ 1,
3491
+ -1,
3492
+ 0,
3493
+ 1,
3494
+ 1,
3495
+ 0,
3496
+ -1,
3497
+ -1,
3498
+ 0,
3499
+ 1,
3500
+ 1,
3501
+ 0,
3502
+ -1,
3503
+ 1,
3504
+ 0
3505
+ ]);
3506
+ const uvs = new Float32Array([
3507
+ 0,
3508
+ 0,
3509
+ 1,
3510
+ 0,
3511
+ 1,
3512
+ 1,
3513
+ 0,
3514
+ 0,
3515
+ 1,
3516
+ 1,
3517
+ 0,
3518
+ 1
3519
+ ]);
3520
+ geom.setAttribute("position", new THREE8.BufferAttribute(positions, 3));
3521
+ geom.setAttribute("uv", new THREE8.BufferAttribute(uvs, 2));
3522
+ return geom;
3523
+ };
3524
+ function ShaderPass({
3525
+ vertexShader,
3526
+ fragmentShader,
3527
+ uniforms,
3528
+ inputUniform = "uTexture",
3529
+ inputTexture = null,
3530
+ target = null,
3531
+ clear = true,
3532
+ clearColor = 0,
3533
+ blending = THREE8.NoBlending,
3534
+ transparent = false,
3535
+ enabled = true,
3536
+ timeUniform,
3537
+ resolutionUniform,
3538
+ hexColors,
3539
+ priority: _priority,
3540
+ className,
3541
+ style,
3542
+ width,
3543
+ height,
3544
+ ...divProps
3545
+ }) {
3546
+ const assetsRef = (0, import_react10.useRef)(null);
3547
+ void _priority;
3548
+ const mixedPaletteColor = (0, import_react10.useMemo)(() => {
3549
+ if (!hexColors?.length) return null;
3550
+ const mixed = new THREE8.Color(0, 0, 0);
3551
+ hexColors.forEach((hex) => {
3552
+ const c = new THREE8.Color(hex);
3553
+ mixed.r += c.r;
3554
+ mixed.g += c.g;
3555
+ mixed.b += c.b;
3556
+ });
3557
+ mixed.r /= hexColors.length;
3558
+ mixed.g /= hexColors.length;
3559
+ mixed.b /= hexColors.length;
3560
+ return mixed;
3561
+ }, [hexColors]);
3562
+ (0, import_react10.useEffect)(() => {
3563
+ if (!uniforms.uPaletteColor) {
3564
+ uniforms.uPaletteColor = {
3565
+ value: mixedPaletteColor ?? new THREE8.Color(0, 0, 0)
3566
+ };
3567
+ } else {
3568
+ uniforms.uPaletteColor.value.copy(
3569
+ mixedPaletteColor ?? new THREE8.Color(0, 0, 0)
3570
+ );
3571
+ }
3572
+ if (!uniforms.uHasPalette) {
3573
+ uniforms.uHasPalette = { value: mixedPaletteColor ? 1 : 0 };
3574
+ } else {
3575
+ uniforms.uHasPalette.value = mixedPaletteColor ? 1 : 0;
3576
+ }
3577
+ if (assetsRef.current) {
3578
+ assetsRef.current.material.uniformsNeedUpdate = true;
3579
+ }
3580
+ }, [mixedPaletteColor, uniforms]);
3581
+ const handleCreate = (0, import_react10.useCallback)(() => {
3582
+ const scene = new THREE8.Scene();
3583
+ const camera = new THREE8.OrthographicCamera(-1, 1, 1, -1, 0, 1);
3584
+ const geometry = buildQuadGeometry();
3585
+ const material = new THREE8.ShaderMaterial({
3586
+ glslVersion: THREE8.GLSL3,
3587
+ vertexShader,
3588
+ fragmentShader,
3589
+ uniforms,
3590
+ blending,
3591
+ transparent,
3592
+ depthTest: false,
3593
+ depthWrite: false
3594
+ });
3595
+ const mesh = new THREE8.Mesh(geometry, material);
3596
+ mesh.frustumCulled = false;
3597
+ scene.add(mesh);
3598
+ assetsRef.current = { scene, camera, mesh, geometry, material };
3599
+ return () => {
3600
+ scene.remove(mesh);
3601
+ geometry.dispose();
3602
+ material.dispose();
3603
+ assetsRef.current = null;
3604
+ };
3605
+ }, [blending, fragmentShader, transparent, uniforms, vertexShader]);
3606
+ const handleRender = (0, import_react10.useCallback)(
3607
+ (context, delta) => {
3608
+ if (!enabled) return;
3609
+ const assets = assetsRef.current;
3610
+ if (!assets) return;
3611
+ if (timeUniform && uniforms[timeUniform]) {
3612
+ uniforms[timeUniform].value = (uniforms[timeUniform].value ?? 0) + delta;
3613
+ }
3614
+ if (resolutionUniform && uniforms[resolutionUniform]) {
3615
+ const v = uniforms[resolutionUniform].value;
3616
+ if (v?.set) v.set(context.size.width, context.size.height);
3617
+ }
3618
+ const prevTarget = context.renderer.getRenderTarget();
3619
+ const prevAutoClear = context.renderer.autoClear;
3620
+ context.renderer.autoClear = false;
3621
+ if (target) context.renderer.setRenderTarget(target);
3622
+ else context.renderer.setRenderTarget(null);
3623
+ if (clear) {
3624
+ const prevClear = context.renderer.getClearColor(new THREE8.Color());
3625
+ const prevAlpha = context.renderer.getClearAlpha();
3626
+ context.renderer.setClearColor(new THREE8.Color(clearColor), 1);
3627
+ context.renderer.clear(true, true, true);
3628
+ context.renderer.setClearColor(prevClear, prevAlpha);
3629
+ }
3630
+ context.renderer.render(assets.scene, assets.camera);
3631
+ context.renderer.setRenderTarget(prevTarget);
3632
+ context.renderer.autoClear = prevAutoClear;
3633
+ },
3634
+ [clear, clearColor, enabled, resolutionUniform, target, timeUniform, uniforms]
3635
+ );
3636
+ const { containerRef } = useScene({
3637
+ onCreate: handleCreate,
3638
+ onRender: handleRender,
3639
+ manualRender: true
3640
+ });
3641
+ (0, import_react10.useEffect)(() => {
3642
+ if (!inputTexture) return;
3643
+ const u = uniforms?.[inputUniform];
3644
+ if (u) u.value = inputTexture;
3645
+ }, [inputTexture, inputUniform, uniforms]);
3646
+ (0, import_react10.useEffect)(() => {
3647
+ const assets = assetsRef.current;
3648
+ if (!assets) return;
3649
+ assets.material.vertexShader = vertexShader;
3650
+ assets.material.fragmentShader = fragmentShader;
3651
+ assets.material.uniforms = uniforms;
3652
+ assets.material.needsUpdate = true;
3653
+ }, [fragmentShader, uniforms, vertexShader]);
3654
+ (0, import_react10.useEffect)(() => {
3655
+ const assets = assetsRef.current;
3656
+ if (!assets) return;
3657
+ assets.material.blending = blending;
3658
+ assets.material.transparent = transparent;
3659
+ assets.material.needsUpdate = true;
3660
+ }, [blending, transparent]);
3661
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3662
+ "div",
3663
+ {
3664
+ ref: containerRef,
3665
+ className,
3666
+ style: {
3667
+ width: width ?? "100%",
3668
+ height: height ?? "100%",
3669
+ ...style
3670
+ },
3671
+ ...divProps
3672
+ }
3673
+ );
3674
+ }
3675
+
3676
+ // src/shaders/ripple-wave/fragment.glsl
3677
+ var fragment_default8 = "precision highp float;\n\nin vec2 vUv;\nout vec4 FragColor;\n\nuniform float uTime;\nuniform vec2 uResolution;\nuniform float uIntensity;\nuniform float uZoom;\nuniform float uSpeed;\nuniform vec3 uPaletteA;\nuniform vec3 uPaletteB;\nuniform int uHasPalette;\n\nvoid main() {\n vec2 uv = vUv - 0.5;\n uv.x *= uResolution.x / max(uResolution.y, 1.0);\n uv *= uZoom;\n\n float t = uTime * uSpeed;\n float rings = sin(length(uv) * 8.0 - t * 1.5);\n float waves = sin((uv.x + uv.y) * 6.0 + t * 0.9);\n float glow = smoothstep(0.0, 1.0, rings * 0.5 + 0.5);\n\n vec3 base = mix(vec3(0.05, 0.1, 0.2), vec3(0.35, 0.8, 0.9), glow);\n if (uHasPalette == 1) {\n base = mix(uPaletteA, uPaletteB, glow);\n }\n vec3 color = base + waves * 0.12;\n color *= uIntensity;\n\n FragColor = vec4(color, 1.0);\n}\n";
3678
+
3679
+ // src/shaders/ripple-wave/vertex.glsl
3680
+ var vertex_default7 = "out vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = vec4(position, 1.0);\n}\n";
3681
+
3682
+ // src/components/RippleWave.tsx
3683
+ var import_jsx_runtime12 = require("react/jsx-runtime");
3684
+ function RippleWave({
3685
+ width,
3686
+ height,
3687
+ intensity = 0.85,
3688
+ zoom = 1.2,
3689
+ speed = 0.9,
3690
+ hexColors
3691
+ }) {
3692
+ const uniforms = (0, import_react11.useMemo)(
3693
+ () => ({
3694
+ uTime: { value: 0 },
3695
+ uResolution: { value: new THREE9.Vector2() },
3696
+ uIntensity: { value: intensity },
3697
+ uZoom: { value: zoom },
3698
+ uSpeed: { value: speed },
3699
+ uPaletteA: { value: new THREE9.Color(0, 0, 0) },
3700
+ uPaletteB: { value: new THREE9.Color(0, 0, 0) },
3701
+ uHasPalette: { value: 0 }
3702
+ }),
3703
+ // eslint-disable-next-line react-hooks/exhaustive-deps
3704
+ []
3705
+ );
3706
+ uniforms.uIntensity.value = intensity;
3707
+ uniforms.uZoom.value = zoom;
3708
+ uniforms.uSpeed.value = speed;
3709
+ const mixedPalette = (0, import_react11.useMemo)(() => {
3710
+ if (!hexColors?.length) return null;
3711
+ const midpoint = Math.ceil(hexColors.length / 2);
3712
+ const firstHalf = hexColors.slice(0, midpoint);
3713
+ const secondHalf = hexColors.slice(midpoint);
3714
+ const average = (colors) => {
3715
+ if (!colors.length) return new THREE9.Color(0, 0, 0);
3716
+ const mixed = new THREE9.Color(0, 0, 0);
3717
+ colors.forEach((hex) => {
3718
+ const c = new THREE9.Color(hex);
3719
+ mixed.r += c.r;
3720
+ mixed.g += c.g;
3721
+ mixed.b += c.b;
3722
+ });
3723
+ mixed.r /= colors.length;
3724
+ mixed.g /= colors.length;
3725
+ mixed.b /= colors.length;
3726
+ return mixed;
3727
+ };
3728
+ return {
3729
+ a: average(firstHalf),
3730
+ b: average(secondHalf.length ? secondHalf : firstHalf)
3731
+ };
3732
+ }, [hexColors]);
3733
+ if (mixedPalette) {
3734
+ uniforms.uPaletteA.value.copy(mixedPalette.a);
3735
+ uniforms.uPaletteB.value.copy(mixedPalette.b);
3736
+ uniforms.uHasPalette.value = 1;
3737
+ } else {
3738
+ uniforms.uHasPalette.value = 0;
3739
+ }
3740
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
3741
+ ShaderPass,
3742
+ {
3743
+ vertexShader: vertex_default7,
3744
+ fragmentShader: fragment_default8,
3745
+ uniforms,
3746
+ clearColor: 396052,
3747
+ timeUniform: "uTime",
3748
+ resolutionUniform: "uResolution",
3749
+ priority: 1,
3750
+ width,
3751
+ height
3752
+ }
3753
+ );
3754
+ }
2662
3755
  // Annotate the CommonJS export names for ESM import in node:
2663
3756
  0 && (module.exports = {
2664
3757
  AnimatedDrawingSVG,
@@ -2668,6 +3761,9 @@ function AnimatedDrawingSVG({
2668
3761
  FractalFlower,
2669
3762
  MenuGlitch,
2670
3763
  OranoParticles,
3764
+ RippleWave,
2671
3765
  ShaderArt,
2672
- Snow
3766
+ Snow,
3767
+ WANDY_HAND_DEFAULTS,
3768
+ WandyHand
2673
3769
  });