From ea60d12b77728944c3c2d518a73991175447e4b2 Mon Sep 17 00:00:00 2001 From: Richard Tan <30404522+richardhjtan@users.noreply.github.com> Date: Wed, 7 Jan 2026 16:55:46 +0800 Subject: [PATCH] Add listing: Beat Maker Studio --- .../ab800371-b455-4a23-85f4-42fd0b786abb.json | 96 + .../1ae19cab-8003-41b4-950a-2305f442fd0b.json | 35 + .../5ae71ae1-9cab-4003-b1b4-550a2305f442.json | 35 + .../9cab8003-71b4-450a-a305-f442fd0b786a.json | 35 + .../e19cab80-0371-4455-8a23-05f442fd0b78.json | 35 + .../e71ae19c-ab80-4371-b455-0a2305f442fd.json | 35 + beat-maker/BeatMakerCard/rhythm-studio.json | 101 + .../BeatPatternCard/basic-4-4-beat.json | 29 + beat-maker/BeatPatternCard/breakbeat.json | 29 + beat-maker/BeatPatternCard/house-groove.json | 29 + beat-maker/BeatPatternCard/jazz-swing.json | 29 + beat-maker/BeatPatternCard/rock-beat.json | 29 + beat-maker/BeatPatternCard/trap-pattern.json | 29 + beat-maker/DrumKitCard/808-analog-kit.json | 28 + beat-maker/DrumKitCard/house-kit.json | 28 + beat-maker/DrumKitCard/jazz-kit.json | 28 + beat-maker/DrumKitCard/rock-kit.json | 28 + beat-maker/DrumKitCard/techno-kit.json | 28 + beat-maker/DrumKitCard/trap-kit.json | 28 + beat-maker/beat-maker.gts | 3192 +++++++++++++++++ 20 files changed, 3906 insertions(+) create mode 100644 CardListing/ab800371-b455-4a23-85f4-42fd0b786abb.json create mode 100644 Spec/1ae19cab-8003-41b4-950a-2305f442fd0b.json create mode 100644 Spec/5ae71ae1-9cab-4003-b1b4-550a2305f442.json create mode 100644 Spec/9cab8003-71b4-450a-a305-f442fd0b786a.json create mode 100644 Spec/e19cab80-0371-4455-8a23-05f442fd0b78.json create mode 100644 Spec/e71ae19c-ab80-4371-b455-0a2305f442fd.json create mode 100644 beat-maker/BeatMakerCard/rhythm-studio.json create mode 100644 beat-maker/BeatPatternCard/basic-4-4-beat.json create mode 100644 beat-maker/BeatPatternCard/breakbeat.json create mode 100644 beat-maker/BeatPatternCard/house-groove.json create mode 100644 beat-maker/BeatPatternCard/jazz-swing.json create mode 100644 beat-maker/BeatPatternCard/rock-beat.json create mode 100644 beat-maker/BeatPatternCard/trap-pattern.json create mode 100644 beat-maker/DrumKitCard/808-analog-kit.json create mode 100644 beat-maker/DrumKitCard/house-kit.json create mode 100644 beat-maker/DrumKitCard/jazz-kit.json create mode 100644 beat-maker/DrumKitCard/rock-kit.json create mode 100644 beat-maker/DrumKitCard/techno-kit.json create mode 100644 beat-maker/DrumKitCard/trap-kit.json create mode 100644 beat-maker/beat-maker.gts diff --git a/CardListing/ab800371-b455-4a23-85f4-42fd0b786abb.json b/CardListing/ab800371-b455-4a23-85f4-42fd0b786abb.json new file mode 100644 index 0000000..311e92a --- /dev/null +++ b/CardListing/ab800371-b455-4a23-85f4-42fd0b786abb.json @@ -0,0 +1,96 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "CardListing", + "module": "../catalog-app/listing/listing" + } + }, + "type": "card", + "attributes": { + "name": "Beat Maker Studio", + "images": [ + "https://boxel-images.boxel.ai/app-assets/catalog/beat-maker-listing/screenshot_01.png" + ], + "summary": "Professional beat maker and rhythm sequencer for creating music beats, patterns, and drum sequences with customizable instruments and sound kits.", + "cardInfo": { + "notes": "Includes multiple instrument kits, pattern sequencing, and real-time beat creation capabilities", + "title": "Beat Maker Studio", + "description": "A comprehensive beat making application that allows users to create custom drum patterns, sequence beats, and mix audio with various instrument kits. Features include BPM control, swing settings, pattern management, and multiple sound libraries for professional music production.", + "thumbnailURL": "https://boxel-images.boxel.ai/app-assets/catalog/beat-maker-listing/thumbnail.png" + } + }, + "relationships": { + "tags": { + "links": { + "self": null + } + }, + "skills": { + "links": { + "self": null + } + }, + "license": { + "links": { + "self": null + } + }, + "specs.0": { + "links": { + "self": "../Spec/5ae71ae1-9cab-4003-b1b4-550a2305f442" + } + }, + "specs.1": { + "links": { + "self": "../Spec/1ae19cab-8003-41b4-950a-2305f442fd0b" + } + }, + "specs.2": { + "links": { + "self": "../Spec/e71ae19c-ab80-4371-b455-0a2305f442fd" + } + }, + "specs.3": { + "links": { + "self": "../Spec/e19cab80-0371-4455-8a23-05f442fd0b78" + } + }, + "specs.4": { + "links": { + "self": "../Spec/9cab8003-71b4-450a-a305-f442fd0b786a" + } + }, + "publisher": { + "links": { + "self": null + } + }, + "examples.0": { + "links": { + "self": "../beat-maker/BeatMakerCard/rhythm-studio" + } + }, + "categories.0": { + "links": { + "self": "../Category/entertainment-media" + } + }, + "categories.1": { + "links": { + "self": "../Category/creative-projects" + } + }, + "categories.2": { + "links": { + "self": "../Category/content-creation" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} \ No newline at end of file diff --git a/Spec/1ae19cab-8003-41b4-950a-2305f442fd0b.json b/Spec/1ae19cab-8003-41b4-950a-2305f442fd0b.json new file mode 100644 index 0000000..0cd9a82 --- /dev/null +++ b/Spec/1ae19cab-8003-41b4-950a-2305f442fd0b.json @@ -0,0 +1,35 @@ +{ + "data": { + "type": "card", + "attributes": { + "readMe": null, + "ref": { + "module": "../beat-maker/beat-maker", + "name": "BeatPatternField" + }, + "specType": "field", + "containedExamples": [], + "title": "BeatPatternField", + "description": null, + "cardInfo": { + "title": null, + "description": null, + "thumbnailURL": null, + "notes": null + } + }, + "relationships": { + "linkedExamples": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "https://cardstack.com/base/spec", + "name": "Spec" + } + } + } +} \ No newline at end of file diff --git a/Spec/5ae71ae1-9cab-4003-b1b4-550a2305f442.json b/Spec/5ae71ae1-9cab-4003-b1b4-550a2305f442.json new file mode 100644 index 0000000..22d3a32 --- /dev/null +++ b/Spec/5ae71ae1-9cab-4003-b1b4-550a2305f442.json @@ -0,0 +1,35 @@ +{ + "data": { + "type": "card", + "attributes": { + "readMe": null, + "ref": { + "module": "../beat-maker/beat-maker", + "name": "DrumKitField" + }, + "specType": "field", + "containedExamples": [], + "title": "DrumKitField", + "description": null, + "cardInfo": { + "title": null, + "description": null, + "thumbnailURL": null, + "notes": null + } + }, + "relationships": { + "linkedExamples": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "https://cardstack.com/base/spec", + "name": "Spec" + } + } + } +} \ No newline at end of file diff --git a/Spec/9cab8003-71b4-450a-a305-f442fd0b786a.json b/Spec/9cab8003-71b4-450a-a305-f442fd0b786a.json new file mode 100644 index 0000000..dceb92b --- /dev/null +++ b/Spec/9cab8003-71b4-450a-a305-f442fd0b786a.json @@ -0,0 +1,35 @@ +{ + "data": { + "type": "card", + "attributes": { + "readMe": null, + "ref": { + "module": "../beat-maker/beat-maker", + "name": "BeatMakerCard" + }, + "specType": "card", + "containedExamples": [], + "title": "BeatMakerCard", + "description": null, + "cardInfo": { + "title": null, + "description": null, + "thumbnailURL": null, + "notes": null + } + }, + "relationships": { + "linkedExamples": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "https://cardstack.com/base/spec", + "name": "Spec" + } + } + } +} \ No newline at end of file diff --git a/Spec/e19cab80-0371-4455-8a23-05f442fd0b78.json b/Spec/e19cab80-0371-4455-8a23-05f442fd0b78.json new file mode 100644 index 0000000..54a8883 --- /dev/null +++ b/Spec/e19cab80-0371-4455-8a23-05f442fd0b78.json @@ -0,0 +1,35 @@ +{ + "data": { + "type": "card", + "attributes": { + "readMe": null, + "ref": { + "module": "../beat-maker/beat-maker", + "name": "BeatPatternCard" + }, + "specType": "card", + "containedExamples": [], + "title": "BeatPatternCard", + "description": null, + "cardInfo": { + "title": null, + "description": null, + "thumbnailURL": null, + "notes": null + } + }, + "relationships": { + "linkedExamples": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "https://cardstack.com/base/spec", + "name": "Spec" + } + } + } +} \ No newline at end of file diff --git a/Spec/e71ae19c-ab80-4371-b455-0a2305f442fd.json b/Spec/e71ae19c-ab80-4371-b455-0a2305f442fd.json new file mode 100644 index 0000000..712927f --- /dev/null +++ b/Spec/e71ae19c-ab80-4371-b455-0a2305f442fd.json @@ -0,0 +1,35 @@ +{ + "data": { + "type": "card", + "attributes": { + "readMe": null, + "ref": { + "module": "../beat-maker/beat-maker", + "name": "DrumKitCard" + }, + "specType": "card", + "containedExamples": [], + "title": "DrumKitCard", + "description": null, + "cardInfo": { + "title": null, + "description": null, + "thumbnailURL": null, + "notes": null + } + }, + "relationships": { + "linkedExamples": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "https://cardstack.com/base/spec", + "name": "Spec" + } + } + } +} \ No newline at end of file diff --git a/beat-maker/BeatMakerCard/rhythm-studio.json b/beat-maker/BeatMakerCard/rhythm-studio.json new file mode 100644 index 0000000..2a32da9 --- /dev/null +++ b/beat-maker/BeatMakerCard/rhythm-studio.json @@ -0,0 +1,101 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "BeatMakerCard", + "module": "../beat-maker" + } + }, + "type": "card", + "attributes": { + "bpm": 110, + "swing": 0, + "pattern": "House-Standard", + "cardInfo": { + "notes": null, + "title": null, + "description": null, + "thumbnailURL": null + }, + "masterVolume": 75, + "instrumentKit": "Rock Kit" + }, + "relationships": { + "currentKit": { + "links": { + "self": "../DrumKitCard/rock-kit" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + }, + "currentPattern": { + "links": { + "self": "../BeatPatternCard/jazz-swing" + } + }, + "availableKits.0": { + "links": { + "self": "../DrumKitCard/808-analog-kit" + } + }, + "availableKits.1": { + "links": { + "self": "../DrumKitCard/trap-kit" + } + }, + "availableKits.2": { + "links": { + "self": "../DrumKitCard/house-kit" + } + }, + "availableKits.3": { + "links": { + "self": "../DrumKitCard/techno-kit" + } + }, + "availableKits.4": { + "links": { + "self": "../DrumKitCard/jazz-kit" + } + }, + "availableKits.5": { + "links": { + "self": "../DrumKitCard/rock-kit" + } + }, + "availablePatterns.0": { + "links": { + "self": "../BeatPatternCard/basic-4-4-beat" + } + }, + "availablePatterns.1": { + "links": { + "self": "../BeatPatternCard/trap-pattern" + } + }, + "availablePatterns.2": { + "links": { + "self": "../BeatPatternCard/house-groove" + } + }, + "availablePatterns.3": { + "links": { + "self": "../BeatPatternCard/breakbeat" + } + }, + "availablePatterns.4": { + "links": { + "self": "../BeatPatternCard/jazz-swing" + } + }, + "availablePatterns.5": { + "links": { + "self": "../BeatPatternCard/rock-beat" + } + } + } + } +} \ No newline at end of file diff --git a/beat-maker/BeatPatternCard/basic-4-4-beat.json b/beat-maker/BeatPatternCard/basic-4-4-beat.json new file mode 100644 index 0000000..446b6e9 --- /dev/null +++ b/beat-maker/BeatPatternCard/basic-4-4-beat.json @@ -0,0 +1,29 @@ +{ + "data": { + "type": "card", + "attributes": { + "patternName": "Basic 4/4 Beat", + "description": "Classic four-on-the-floor pattern with kick on every beat and snare on 2 and 4", + "bpm": 120, + "genre": "Basic", + "creator": "Beat Maker Studio", + "pattern": { + "name": "Basic 4/4 Beat", + "kick": "[true,false,false,false,true,false,false,false,true,false,false,false,true,false,false,false]", + "snare": "[false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false]", + "hihat": "[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true]", + "openhat": "[false,false,false,true,false,false,false,true,false,false,false,true,false,false,false,true]", + "clap": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]", + "crash": "[true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]" + }, + "title": "Basic 4/4 Beat" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "BeatPatternCard" + } + } + } +} diff --git a/beat-maker/BeatPatternCard/breakbeat.json b/beat-maker/BeatPatternCard/breakbeat.json new file mode 100644 index 0000000..54e29ef --- /dev/null +++ b/beat-maker/BeatPatternCard/breakbeat.json @@ -0,0 +1,29 @@ +{ + "data": { + "type": "card", + "attributes": { + "patternName": "Breakbeat", + "description": "Classic breakbeat pattern with syncopated kick and snare placement", + "bpm": 130, + "genre": "Breakbeat", + "creator": "Beat Maker Studio", + "pattern": { + "name": "Breakbeat", + "kick": "[true,false,false,false,false,false,true,false,false,true,false,false,false,false,false,false]", + "snare": "[false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false]", + "hihat": "[false,true,false,true,false,true,false,true,false,true,false,true,false,true,false,true]", + "openhat": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]", + "clap": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]", + "crash": "[true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]" + }, + "title": "Breakbeat" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "BeatPatternCard" + } + } + } +} diff --git a/beat-maker/BeatPatternCard/house-groove.json b/beat-maker/BeatPatternCard/house-groove.json new file mode 100644 index 0000000..1551722 --- /dev/null +++ b/beat-maker/BeatPatternCard/house-groove.json @@ -0,0 +1,29 @@ +{ + "data": { + "type": "card", + "attributes": { + "patternName": "House Groove", + "description": "Steady four-on-the-floor house pattern with off-beat hi-hats", + "bpm": 125, + "genre": "House", + "creator": "Beat Maker Studio", + "pattern": { + "name": "House Groove", + "kick": "[true,false,false,false,true,false,false,false,true,false,false,false,true,false,false,false]", + "snare": "[false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false]", + "hihat": "[false,false,true,false,false,false,true,false,false,false,true,false,false,false,true,false]", + "openhat": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true]", + "clap": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]", + "crash": "[true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]" + }, + "title": "House Groove" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "BeatPatternCard" + } + } + } +} diff --git a/beat-maker/BeatPatternCard/jazz-swing.json b/beat-maker/BeatPatternCard/jazz-swing.json new file mode 100644 index 0000000..f7370e0 --- /dev/null +++ b/beat-maker/BeatPatternCard/jazz-swing.json @@ -0,0 +1,29 @@ +{ + "data": { + "type": "card", + "attributes": { + "patternName": "Jazz Swing", + "description": "Laid-back jazz pattern with subtle kick and brushed snare feel", + "bpm": 110, + "genre": "Jazz", + "creator": "Beat Maker Studio", + "pattern": { + "name": "Jazz Swing", + "kick": "[true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false]", + "snare": "[false,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false]", + "hihat": "[true,false,true,false,true,false,true,false,true,false,true,false,true,false,true,false]", + "openhat": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true]", + "clap": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]", + "crash": "[true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]" + }, + "title": "Jazz Swing" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "BeatPatternCard" + } + } + } +} diff --git a/beat-maker/BeatPatternCard/rock-beat.json b/beat-maker/BeatPatternCard/rock-beat.json new file mode 100644 index 0000000..76d85a4 --- /dev/null +++ b/beat-maker/BeatPatternCard/rock-beat.json @@ -0,0 +1,29 @@ +{ + "data": { + "type": "card", + "attributes": { + "patternName": "Rock Beat", + "description": "Driving rock pattern with steady kick and punchy snare backbeat", + "bpm": 115, + "genre": "Rock", + "creator": "Beat Maker Studio", + "pattern": { + "name": "Rock Beat", + "kick": "[true,false,false,false,true,false,true,false,true,false,false,false,true,false,true,false]", + "snare": "[false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false]", + "hihat": "[true,false,true,false,true,false,true,false,true,false,true,false,true,false,true,false]", + "openhat": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]", + "clap": "[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]", + "crash": "[true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false]" + }, + "title": "Rock Beat" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "BeatPatternCard" + } + } + } +} diff --git a/beat-maker/BeatPatternCard/trap-pattern.json b/beat-maker/BeatPatternCard/trap-pattern.json new file mode 100644 index 0000000..f395b7a --- /dev/null +++ b/beat-maker/BeatPatternCard/trap-pattern.json @@ -0,0 +1,29 @@ +{ + "data": { + "type": "card", + "attributes": { + "patternName": "Trap Pattern", + "description": "Modern trap beat with syncopated kicks and rapid hi-hat rolls", + "bpm": 140, + "genre": "Trap", + "creator": "Beat Maker Studio", + "pattern": { + "name": "Trap Pattern", + "kick": "[true,false,false,true,false,false,true,false,false,false,true,false,false,true,false,false]", + "snare": "[false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false]", + "hihat": "[true,false,true,true,false,true,true,false,true,false,true,true,false,true,true,false]", + "openhat": "[false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,true]", + "clap": "[false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false]", + "crash": "[true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false]" + }, + "title": "Trap Pattern" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "BeatPatternCard" + } + } + } +} diff --git a/beat-maker/DrumKitCard/808-analog-kit.json b/beat-maker/DrumKitCard/808-analog-kit.json new file mode 100644 index 0000000..854a2c8 --- /dev/null +++ b/beat-maker/DrumKitCard/808-analog-kit.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "kitName": "808 Analog", + "description": "Classic analog drum machine sounds with deep kicks and crisp hi-hats", + "category": "Analog", + "creator": "Beat Maker Studio", + "kit": { + "kitName": "808 Analog", + "kickParams": "{\"type\": \"808\", \"frequency\": 60, \"decay\": 0.3, \"amplitude\": 1.0, \"shape\": 2}", + "snareParams": "{\"type\": \"808\", \"frequency\": 200, \"decay\": 0.1, \"amplitude\": 0.8, \"shape\": 1.5, \"resonance\": 5}", + "hihatParams": "{\"type\": \"808\", \"frequency\": 8000, \"decay\": 0.05, \"amplitude\": 0.6, \"shape\": 4, \"resonance\": 2}", + "openhatParams": "{\"type\": \"808\", \"frequency\": 6000, \"decay\": 0.3, \"amplitude\": 0.8, \"shape\": 1.5, \"resonance\": 2}", + "clapParams": "{\"type\": \"808\", \"frequency\": 2000, \"decay\": 0.1, \"amplitude\": 0.6, \"shape\": 2, \"resonance\": 5}", + "crashParams": "{\"type\": \"808\", \"frequency\": 3000, \"decay\": 1.0, \"amplitude\": 0.5, \"shape\": 0.5, \"resonance\": 1}" + }, + "title": "808 Analog" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "DrumKitCard" + } + } + } +} diff --git a/beat-maker/DrumKitCard/house-kit.json b/beat-maker/DrumKitCard/house-kit.json new file mode 100644 index 0000000..67c692f --- /dev/null +++ b/beat-maker/DrumKitCard/house-kit.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "kitName": "House Kit", + "description": "Punchy four-on-the-floor kicks with clean snares and smooth hi-hats", + "category": "House", + "creator": "Beat Maker Studio", + "kit": { + "kitName": "House Kit", + "kickParams": "{\"type\": \"house\", \"frequency\": 65, \"decay\": 0.25, \"amplitude\": 1.0, \"shape\": 1.5, \"resonance\": 1}", + "snareParams": "{\"type\": \"house\", \"frequency\": 180, \"decay\": 0.2, \"amplitude\": 0.8, \"shape\": 2, \"resonance\": 0.5}", + "hihatParams": "{\"type\": \"house\", \"frequency\": 7000, \"decay\": 0.08, \"amplitude\": 0.5, \"shape\": 2, \"resonance\": 1}", + "openhatParams": "{\"type\": \"house\", \"frequency\": 6500, \"decay\": 0.25, \"amplitude\": 0.6, \"shape\": 1.5, \"resonance\": 1}", + "clapParams": "{\"type\": \"house\", \"frequency\": 1800, \"decay\": 0.15, \"amplitude\": 0.7, \"shape\": 2, \"resonance\": 3}", + "crashParams": "{\"type\": \"house\", \"frequency\": 3500, \"decay\": 0.8, \"amplitude\": 0.4, \"shape\": 1, \"resonance\": 1}" + }, + "title": "House Kit" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "DrumKitCard" + } + } + } +} diff --git a/beat-maker/DrumKitCard/jazz-kit.json b/beat-maker/DrumKitCard/jazz-kit.json new file mode 100644 index 0000000..a162db7 --- /dev/null +++ b/beat-maker/DrumKitCard/jazz-kit.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "kitName": "Jazz Kit", + "description": "Warm acoustic simulation with natural textures and gentle filtering", + "category": "Jazz", + "creator": "Beat Maker Studio", + "kit": { + "kitName": "Jazz Kit", + "kickParams": "{\"type\": \"jazz\", \"frequency\": 70, \"decay\": 0.2, \"amplitude\": 0.8, \"shape\": 1.5, \"resonance\": 1}", + "snareParams": "{\"type\": \"jazz\", \"frequency\": 150, \"decay\": 0.25, \"amplitude\": 0.6, \"shape\": 1.5, \"resonance\": 0.5}", + "hihatParams": "{\"type\": \"jazz\", \"frequency\": 5000, \"decay\": 0.12, \"amplitude\": 0.4, \"shape\": 1.5, \"resonance\": 0.3}", + "openhatParams": "{\"type\": \"jazz\", \"frequency\": 4500, \"decay\": 0.35, \"amplitude\": 0.5, \"shape\": 1.2, \"resonance\": 0.5}", + "clapParams": "{\"type\": \"jazz\", \"frequency\": 1600, \"decay\": 0.18, \"amplitude\": 0.5, \"shape\": 1.8, \"resonance\": 2}", + "crashParams": "{\"type\": \"jazz\", \"frequency\": 3200, \"decay\": 1.2, \"amplitude\": 0.3, \"shape\": 0.8, \"resonance\": 0.5}" + }, + "title": "Jazz Kit" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "DrumKitCard" + } + } + } +} diff --git a/beat-maker/DrumKitCard/rock-kit.json b/beat-maker/DrumKitCard/rock-kit.json new file mode 100644 index 0000000..4cfe029 --- /dev/null +++ b/beat-maker/DrumKitCard/rock-kit.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "kitName": "Rock Kit", + "description": "Aggressive punchy drums with heavy compression and beater clicks", + "category": "Rock", + "creator": "Beat Maker Studio", + "kit": { + "kitName": "Rock Kit", + "kickParams": "{\"type\": \"rock\", \"frequency\": 58, \"decay\": 0.25, \"amplitude\": 1.1, \"shape\": 0.7, \"resonance\": 1}", + "snareParams": "{\"type\": \"rock\", \"frequency\": 220, \"decay\": 0.18, \"amplitude\": 1.0, \"shape\": 2, \"resonance\": 3}", + "hihatParams": "{\"type\": \"rock\", \"frequency\": 7500, \"decay\": 0.07, \"amplitude\": 0.8, \"shape\": 3, \"resonance\": 3}", + "openhatParams": "{\"type\": \"rock\", \"frequency\": 7000, \"decay\": 0.3, \"amplitude\": 0.7, \"shape\": 2, \"resonance\": 2}", + "clapParams": "{\"type\": \"rock\", \"frequency\": 2100, \"decay\": 0.12, \"amplitude\": 0.9, \"shape\": 2.5, \"resonance\": 4}", + "crashParams": "{\"type\": \"rock\", \"frequency\": 3800, \"decay\": 0.9, \"amplitude\": 0.6, \"shape\": 1, \"resonance\": 2}" + }, + "title": "Rock Kit" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "DrumKitCard" + } + } + } +} diff --git a/beat-maker/DrumKitCard/techno-kit.json b/beat-maker/DrumKitCard/techno-kit.json new file mode 100644 index 0000000..523bf61 --- /dev/null +++ b/beat-maker/DrumKitCard/techno-kit.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "kitName": "Techno Kit", + "description": "Industrial driving sounds with hard distortion and aggressive filtering", + "category": "Techno", + "creator": "Beat Maker Studio", + "kit": { + "kitName": "Techno Kit", + "kickParams": "{\"type\": \"techno\", \"frequency\": 55, \"decay\": 0.3, \"amplitude\": 1.3, \"shape\": 0.7, \"resonance\": 1}", + "snareParams": "{\"type\": \"techno\", \"frequency\": 1500, \"decay\": 0.15, \"amplitude\": 1.1, \"shape\": 1.5, \"resonance\": 8}", + "hihatParams": "{\"type\": \"techno\", \"frequency\": 9000, \"decay\": 0.06, \"amplitude\": 0.7, \"shape\": 4, \"resonance\": 5}", + "openhatParams": "{\"type\": \"techno\", \"frequency\": 8500, \"decay\": 0.2, \"amplitude\": 0.6, \"shape\": 2, \"resonance\": 4}", + "clapParams": "{\"type\": \"techno\", \"frequency\": 2200, \"decay\": 0.1, \"amplitude\": 0.8, \"shape\": 3, \"resonance\": 6}", + "crashParams": "{\"type\": \"techno\", \"frequency\": 4500, \"decay\": 0.7, \"amplitude\": 0.5, \"shape\": 1, \"resonance\": 3}" + }, + "title": "Techno Kit" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "DrumKitCard" + } + } + } +} diff --git a/beat-maker/DrumKitCard/trap-kit.json b/beat-maker/DrumKitCard/trap-kit.json new file mode 100644 index 0000000..ff64f6e --- /dev/null +++ b/beat-maker/DrumKitCard/trap-kit.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "kitName": "Trap Kit", + "description": "Sub-heavy kicks with snappy snares and metallic hi-hats for modern trap production", + "category": "Trap", + "creator": "Beat Maker Studio", + "kit": { + "kitName": "Trap Kit", + "kickParams": "{\"type\": \"trap\", \"frequency\": 50, \"decay\": 0.8, \"amplitude\": 1.5, \"shape\": 1, \"resonance\": 1}", + "snareParams": "{\"type\": \"trap\", \"frequency\": 2000, \"decay\": 0.08, \"amplitude\": 1.2, \"shape\": 3, \"resonance\": 10}", + "hihatParams": "{\"type\": \"trap\", \"frequency\": 10000, \"decay\": 0.03, \"amplitude\": 0.8, \"shape\": 5, \"resonance\": 2}", + "openhatParams": "{\"type\": \"trap\", \"frequency\": 9000, \"decay\": 0.2, \"amplitude\": 0.7, \"shape\": 2, \"resonance\": 3}", + "clapParams": "{\"type\": \"trap\", \"frequency\": 2500, \"decay\": 0.12, \"amplitude\": 0.8, \"shape\": 2.5, \"resonance\": 8}", + "crashParams": "{\"type\": \"trap\", \"frequency\": 4000, \"decay\": 0.6, \"amplitude\": 0.4, \"shape\": 1, \"resonance\": 2}" + }, + "title": "Trap Kit" + }, + "relationships": {}, + "meta": { + "adoptsFrom": { + "module": "../beat-maker", + "name": "DrumKitCard" + } + } + } +} diff --git a/beat-maker/beat-maker.gts b/beat-maker/beat-maker.gts new file mode 100644 index 0000000..1d598e8 --- /dev/null +++ b/beat-maker/beat-maker.gts @@ -0,0 +1,3192 @@ +import { CardDef, FieldDef, field, contains, linksTo, linksToMany, Component } from 'https://cardstack.com/base/card-api'; +import StringField from 'https://cardstack.com/base/string'; +import NumberField from 'https://cardstack.com/base/number'; +import MusicIcon from '@cardstack/boxel-icons/music'; +import { Button } from '@cardstack/boxel-ui/components'; +import { tracked } from '@glimmer/tracking'; +import { action } from '@ember/object'; +import { on } from '@ember/modifier'; +import { fn, get, array, concat } from '@ember/helper'; +import { eq, gt, or } from '@cardstack/boxel-ui/helpers'; +// ⁸⁹ Drum Kit Definition - stores sound parameters for each kit +import "./beat-maker.gts.CiAgICAgICAgLmRydW0ta2l0LWZpZWxkW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItNDdlYjE2N2MwMl0gewogICAgICAgICAgcGFkZGluZzogMC41cmVtOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzM3NDE1MTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cywgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cykpOwogICAgICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjsKICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIC5raXQtbmFtZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTQ3ZWIxNjdjMDJdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogI2U1ZTdlYjsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuMjVyZW07CiAgICAgICAgfQoKICAgICAgICAua2l0LXR5cGVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi00N2ViMTY3YzAyXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtOwogICAgICAgICAgY29sb3I6ICM5Y2EzYWY7CiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIH0KICAgICAg.glimmer-scoped.css"; +import { setComponentTemplate } from "@ember/component"; +import { createTemplateFactory } from "@ember/template-factory"; +import "./beat-maker.gts.CiAgICAgICAgLmRydW0ta2l0LWNhcmRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xYzJiYmVhZjNmXSB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMWUyOTNiIDAlLCAjMzc0MTUxIDEwMCUpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhsLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLXhsKSk7CiAgICAgICAgICBwYWRkaW5nOiAxcmVtOwogICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzRiNTU2MzsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuZHJ1bS1raXQtY2FyZFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFjMmJiZWFmM2ZdOmhvdmVyIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMTBiOTgxOwogICAgICAgIH0KCiAgICAgICAgLmtpdC1oZWFkZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xYzJiYmVhZjNmXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtOwogICAgICAgIH0KCiAgICAgICAgLmtpdC10aXRsZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFjMmJiZWFmM2ZdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMTBiOTgxLCAjMzRkMzk5KTsKICAgICAgICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgICAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgICAgIH0KCiAgICAgICAgLmNhdGVnb3J5LXRhZ1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFjMmJiZWFmM2ZdIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxMGI5ODE7CiAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCwgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cy14bCkpOwogICAgICAgICAgZm9udC1zaXplOiAwLjYyNXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIH0KCiAgICAgICAgLmtpdC1kZXNjcmlwdGlvbltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFjMmJiZWFmM2ZdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgICAgICAgIGNvbG9yOiAjY2JkNWUxOwogICAgICAgICAgbWFyZ2luOiAwIDAgMC43NXJlbSAwOwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgICB9CgogICAgICAgIC5raXQtZm9vdGVyW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWMyYmJlYWYzZl0gewogICAgICAgICAgcGFkZGluZy10b3A6IDAuNXJlbTsKICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjNGI1NTYzOwogICAgICAgIH0KCiAgICAgICAgLmNyZWF0b3JbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xYzJiYmVhZjNmXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtOwogICAgICAgICAgY29sb3I6ICM5Y2EzYWY7CiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgfQogICAgICA%3D.glimmer-scoped.css"; +import "./beat-maker.gts.CiAgICAgICAgLmJlYXQtcGF0dGVybi1jYXJkW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMTc4MzIwMDQwZl0gewogICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBmMTcyYSAwJSwgIzFlMjkzYiAxMDAlKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCwgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cy14bCkpOwogICAgICAgICAgcGFkZGluZzogMXJlbTsKICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzNzQxNTE7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLmJlYXQtcGF0dGVybi1jYXJkW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMTc4MzIwMDQwZl06aG92ZXIgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgICBib3JkZXItY29sb3I6ICM2MGE1ZmE7CiAgICAgICAgfQoKICAgICAgICAucGF0dGVybi1oZWFkZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xNzgzMjAwNDBmXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtOwogICAgICAgIH0KCiAgICAgICAgLnBhdHRlcm4tdGl0bGVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xNzgzMjAwNDBmXSB7CiAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzYwYTVmYSwgI2E3OGJmYSk7CiAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgICAgICB9CgogICAgICAgIC5wYXR0ZXJuLW1ldGFbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xNzgzMjAwNDBmXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAwLjVyZW07CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmdlbnJlLXRhZ1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTE3ODMyMDA0MGZdIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICMzNzQxNTE7CiAgICAgICAgICBjb2xvcjogI2U1ZTdlYjsKICAgICAgICAgIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhsLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLXhsKSk7CiAgICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtOwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgfQoKICAgICAgICAuYnBtLWluZGljYXRvcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTE3ODMyMDA0MGZdIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxMGI5ODE7CiAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cywgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cykpOwogICAgICAgICAgZm9udC1zaXplOiAwLjYyNXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIH0KCiAgICAgICAgLnBhdHRlcm4tZGVzY3JpcHRpb25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xNzgzMjAwNDBmXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNzVyZW07CiAgICAgICAgICBjb2xvcjogI2NiZDVlMTsKICAgICAgICAgIG1hcmdpbjogMCAwIDAuNzVyZW0gMDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgICAgfQoKICAgICAgICAucGF0dGVybi1wcmV2aWV3W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMTc4MzIwMDQwZl0gewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTsKICAgICAgICB9CgogICAgICAgIC5wYXR0ZXJuLWZvb3RlcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTE3ODMyMDA0MGZdIHsKICAgICAgICAgIHBhZGRpbmctdG9wOiAwLjVyZW07CiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzM3NDE1MTsKICAgICAgICB9CgogICAgICAgIC5jcmVhdG9yW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMTc4MzIwMDQwZl0gewogICAgICAgICAgZm9udC1zaXplOiAwLjYyNXJlbTsKICAgICAgICAgIGNvbG9yOiAjOWNhM2FmOwogICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIH0KICAgICAg.glimmer-scoped.css"; +import "./beat-maker.gts.CiAgICAgICAgLmJlYXQtcGF0dGVybi1maWVsZFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTIyZmUxODk0ZGFdIHsKICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNWU3ZWI7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMsIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMpKTsKICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIH0KCiAgICAgICAgLnBhdHRlcm4tbmFtZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTIyZmUxODk0ZGFdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuMzc1cmVtOwogICAgICAgIH0KCiAgICAgICAgLnBhdHRlcm4tYmFyc1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTIyZmUxODk0ZGFdIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDFweDsKICAgICAgICB9CgogICAgICAgIC5wYXR0ZXJuLXN0ZXBbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yMmZlMTg5NGRhXSB7CiAgICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICAgIGhlaWdodDogOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2YzZjRmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14eHMsIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMteHhzKSk7CiAgICAgICAgfQoKICAgICAgICAucGF0dGVybi1zdGVwLmhhcy1raWNrW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjJmZTE4OTRkYV0gewogICAgICAgICAgYmFja2dyb3VuZDogI2Y1OWUwYjsKICAgICAgICB9CiAgICAgIA%3D%3D.glimmer-scoped.css"; +import "./beat-maker.gts.CiAgICAgIC8qIMKywrIgRW5oYW5jZWQgQmVhdCBtYWtlciBzdHlsZXMgd2l0aCBDbGF5bW9ycGhpYyB0aGVtZSAqLwogICAgICAuYmVhdC1tYWtlci1jYXJkW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNDVkZWcsICMwYTBlMWEsICMxYTFmMmUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCwgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cy14bCkpOwogICAgICAgIHBhZGRpbmc6IDEuNXJlbTsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCwgI2ZmZmZmZik7CiAgICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7CiAgICAgICAgbWluLWhlaWdodDogNTAwcHg7CgogICAgICAgIGJveC1zaGFkb3c6CiAgICAgICAgICBpbnNldCAwIDAgMzBweCByZ2JhKDAsIDAsIDAsIDAuNSksCiAgICAgICAgICAwIDEwcHggNDBweCByZ2JhKDAsIDAsIDAsIDAuNyksCiAgICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjkpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMxYTFmMmU7CiAgICAgIH0KCiAgICAgIC8qIEVuaGFuY2VkIEhlYWRlciAqLwogICAgICAuYmVhdC1tYWtlci1oZWFkZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgICAgIGdhcDogMXJlbTsKICAgICAgfQoKICAgICAgLmhlYWRlci1sZWZ0W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDAuNXJlbTsKICAgICAgfQoKICAgICAgLmJlYXQtbWFrZXItaGVhZGVyIGgzW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXNpemU6IDEuMjVyZW07CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAxMzVkZWcsCiAgICAgICAgICB2YXIoLS1wcmltYXJ5LCAjNjBhNWZhKSwKICAgICAgICAgIHZhcigtLWFjY2VudCwgI2E3OGJmYSkKICAgICAgICApOwogICAgICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAgIH0KCiAgICAgIC5raXQtc2VsZWN0b3IgLmtpdC1kcm9wZG93bltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLCAjMzc0MTUxKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIsICM0YjU1NjMpOwogICAgICAgIGNvbG9yOiB2YXIoLS1jYXJkLWZvcmVncm91bmQsICNmZmZmZmYpOwogICAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcsIDAuMzc1cmVtKSBjYWxjKHZhcigtLXNwYWNpbmcsIDAuMjVyZW0pICogMyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzKSk7CiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8sICdKZXRCcmFpbnMgTW9ubycsICdGaXJhIENvZGUnLCBtb25vc3BhY2UpOwogICAgICB9CgogICAgICAuaGVhZGVyLWNvbnRyb2xzW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDFyZW07CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWdyb3VwW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMC4yNXJlbTsKICAgICAgICBtaW4td2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWxhYmVsW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGZvbnQtc2l6ZTogMC42MjVyZW07CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQsICM5Y2EzYWYpOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICAuY29udHJvbC12YWx1ZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBmb250LXNpemU6IDAuNzVyZW07CiAgICAgICAgY29sb3I6IHZhcigtLWZvcmVncm91bmQsICNlNWU3ZWIpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWluLXdpZHRoOiA0MHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnNsaWRlcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dCwgIzM3NDE1MSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhzLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLXhzKSk7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zbGlkZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXTo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeSwgIzYwYTVmYSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDE1LCAyMywgNDIsIDAuMykpOwogICAgICB9CgogICAgICAuc2xpZGVyW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV06Oi1tb3otcmFuZ2UtdGh1bWIgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LCAjNjBhNWZhKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDE1LCAyMywgNDIsIDAuMykpOwogICAgICB9CgogICAgICAucGxheS1idXR0b25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LCAjMTBiOTgxKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCwgI2ZmZmZmZik7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCwgMCA0cHggMTJweCByZ2JhKDE2LCAxODUsIDEyOSwgMC4zKSk7CiAgICAgIH0KCiAgICAgIC5wbGF5LWJ1dHRvbltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LCAjMDU5NjY5KTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZywgMCA2cHggMTZweCByZ2JhKDE2LCAxODUsIDEyOSwgMC40KSk7CiAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMSk7CiAgICAgIH0KCiAgICAgIC5wbGF5LWJ1dHRvbi5wbGF5aW5nW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRlc3RydWN0aXZlLCAjZWY0NDQ0KTsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQsIDAgNHB4IDEycHggcmdiYSgyMzksIDY4LCA2OCwgMC4zKSk7CiAgICAgIH0KCiAgICAgIC5wbGF5LWJ1dHRvbi5wbGF5aW5nW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRlc3RydWN0aXZlLCAjZGMyNjI2KTsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcsIDAgNnB4IDE2cHggcmdiYSgyMzksIDY4LCA2OCwgMC40KSk7CiAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMSk7CiAgICAgIH0KCiAgICAgIC5wbGF5LWJ1dHRvbiBzdmdbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICAvKiBDb21wYWN0IFBhdHRlcm4gTGlicmFyeSAqLwogICAgICAucHJlc2V0cy1zZWN0aW9uW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07CiAgICAgICAgcGFkZGluZzogY2FsYyh2YXIoLS1zcGFjaW5nLCAwLjI1cmVtKSAqIDMpOwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNDVkZWcsICMwZDExMTcsICMxYzIxMjgpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cywgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cykpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyYTM0NDE7CiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCAxNXB4IHJnYmEoMCwgMCwgMCwgMC40KSwKICAgICAgICAgIDAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICB9CgogICAgICAucHJlc2V0cy1oZWFkZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07CiAgICAgIH0KCiAgICAgIC5wcmVzZXRzLWxhYmVsW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgICAgICBjb2xvcjogdmFyKC0tZm9yZWdyb3VuZCwgI2U1ZTdlYik7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgIH0KCiAgICAgIC5wYXR0ZXJucy1jb3VudFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtOwogICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCwgI2Y1OWUwYik7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vLCAnSmV0QnJhaW5zIE1vbm8nLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQsIHJnYmEoMjQ1LCAxNTgsIDExLCAwLjEpKTsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLCAwLjEyNXJlbSkgY2FsYyh2YXIoLS1zcGFjaW5nLCAwLjI1cmVtKSAqIDEuNSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLXNtKSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLCByZ2JhKDI0NSwgMTU4LCAxMSwgMC4yKSk7CiAgICAgIH0KCiAgICAgIC5wcmVzZXQtYnV0dG9uc1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMC41cmVtOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07CiAgICAgICAgbWF4LWhlaWdodDogNjBweDsKICAgICAgfQoKICAgICAgLyogSG9yaXpvbnRhbCBzY3JvbGwgZm9yIHBhdHRlcm4gbGlzdCAqLwogICAgICAucHJlc2V0LWJ1dHRvbnNbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXTo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICB9CgogICAgICAucHJlc2V0LWJ1dHRvbnNbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTUsIDY1LCA4MSwgMC4zKTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteHMsIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMteHMpKTsKICAgICAgfQoKICAgICAgLnByZXNldC1idXR0b25zW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV06Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC41KTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteHMsIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMteHMpKTsKICAgICAgfQoKICAgICAgLnByZXNldC1idXR0b25zW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV06Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC43KTsKICAgICAgfQoKICAgICAgLnByZXNldC1idXR0b25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgICAgbWluLXdpZHRoOiAxMjBweDsKICAgICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLXNwYWNpbmcsIDAuMjVyZW0pICogMikKICAgICAgICAgIGNhbGModmFyKC0tc3BhY2luZywgMC4yNXJlbSkgKiAzKTsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCAjMWUyNTMwLCAjMmEzNDQxKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjM2E0NDUxOwogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktZm9yZWdyb3VuZCwgI2ZmZmZmZik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzKSk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCA4cHggcmdiYSgwLCAwLCAwLCAwLjMpLAogICAgICAgICAgMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfQoKICAgICAgLnByZXNldC1idXR0b25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKAogICAgICAgICAgLS1zZWNvbmRhcnksCiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNGI1NTYzIDAlLCAjMzc0MTUxIDEwMCUpCiAgICAgICAgKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJpbmcsICNmNTllMGIpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQsIDAgMnB4IDhweCByZ2JhKDI0NSwgMTU4LCAxMSwgMC4yKSk7CiAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDUpOwogICAgICB9CgogICAgICAucHJlc2V0LWJ1dHRvbi5hY3RpdmUtcGF0dGVybltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoCiAgICAgICAgICAtLXByaW1hcnksCiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZjU5ZTBiIDAlLCAjZjk3MzE2IDEwMCUpCiAgICAgICAgKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXByaW1hcnksICNmNTllMGIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWZvcmVncm91bmQsICNmZmZmZmYpOwogICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZywgMCAycHggOHB4IHJnYmEoMjQ1LCAxNTgsIDExLCAwLjMpKTsKICAgICAgfQoKICAgICAgLnByZXNldC1idXR0b24uYWN0aXZlLXBhdHRlcm5bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwLjI1cmVtOwogICAgICAgIHJpZ2h0OiAwLjI1cmVtOwogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IGFjdGl2ZS1wdWxzZS1kYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTEgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgYWN0aXZlLXB1bHNlLWRhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MSB7CiAgICAgICAgMCUsCiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5wcmVzZXQtY29udGVudFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAwLjI1cmVtOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5wcmVzZXQtbmFtZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBmb250LXNpemU6IDAuNzVyZW07CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC5wcmVzZXQtbWV0YVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMC4yNXJlbTsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5wcmVzZXQtZ2VucmVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgZm9udC1zaXplOiAwLjVyZW07CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNTYsIDE2MywgMTc1LCAwLjIpOwogICAgICAgIGNvbG9yOiAjZDFkNWRiOwogICAgICAgIHBhZGRpbmc6IDAuMDYyNXJlbSAwLjI1cmVtOwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cywgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cy14cykpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnByZXNldC1icG1bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgZm9udC1zaXplOiAwLjVyZW07CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMjExLCAyMzgsIDAuMik7CiAgICAgICAgY29sb3I6ICMyMmQzZWU7CiAgICAgICAgcGFkZGluZzogMC4wNjI1cmVtIDAuMjVyZW07CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhzLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLXhzKSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgICB9CgogICAgICAucHJlc2V0LWJ1dHRvbi5hY3RpdmUtcGF0dGVybiAucHJlc2V0LWdlbnJlW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgICB9CgogICAgICAucHJlc2V0LWJ1dHRvbi5hY3RpdmUtcGF0dGVybiAucHJlc2V0LWJwbVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgfQoKICAgICAgLmtpdC1mYWxsYmFja1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBjb2xvcjogIzljYTNhZjsKICAgICAgICBmb250LXNpemU6IDAuNzVyZW07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAvKiBFbmhhbmNlZCBCZWF0IEdyaWQgKi8KICAgICAgLmJlYXQtZ3JpZFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCAjMGYxNDE5LCAjMWUyNTMwKTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteGwsIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMteGwpKTsKICAgICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLXNwYWNpbmcsIDAuMjVyZW0pICogNCk7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyYTM0NDE7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCAyMHB4IHJnYmEoMCwgMCwgMCwgMC42KSwKICAgICAgICAgIDAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgICB9CgogICAgICAuc3RlcC1udW1iZXJzW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtOwogICAgICAgIGdhcDogMC4yNXJlbTsKICAgICAgfQoKICAgICAgLmluc3RydW1lbnQtY29udHJvbHNbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgd2lkdGg6IDE4MHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuc3RlcC1udW1iZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtOwogICAgICAgIGNvbG9yOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCAjNjQ3NDhiKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICAuc3RlcC1udW1iZXIuYmVhdC1tYXJrZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgY29sb3I6IHZhcigtLXJpbmcsICNmNTllMGIpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgIH0KCiAgICAgIC5pbnN0cnVtZW50LXJvd1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAwLjI1cmVtOwogICAgICAgIG1hcmdpbi1ib3R0b206IDAuNzVyZW07CiAgICAgIH0KCiAgICAgIC5pbnN0cnVtZW50LWxhYmVsW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1mb3JlZ3JvdW5kLCAjZTVlN2ViKTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgbWluLXdpZHRoOiA1MHB4OwogICAgICB9CgogICAgICAuaW5zdHJ1bWVudC12b2x1bWVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMC4yNXJlbTsKICAgICAgICBtYXJnaW4tdG9wOiAwLjI1cmVtOwogICAgICB9CgogICAgICAudm9sdW1lLXNsaWRlci1zbWFsbFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDNweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dCwgIzM3NDE1MSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhzLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLXhzKSk7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgIH0KCiAgICAgIC52b2x1bWUtc2xpZGVyLXNtYWxsW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV06Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXJ0LTIsICMzNGQzOTkpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXhzLCAwIDFweCAycHggcmdiYSgxNSwgMjMsIDQyLCAwLjI1KSk7CiAgICAgIH0KCiAgICAgIC52b2x1bWUtc2xpZGVyLXNtYWxsW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV06Oi1tb3otcmFuZ2UtdGh1bWIgewogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGFydC0yLCAjMzRkMzk5KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDE1LCAyMywgNDIsIDAuMjUpKTsKICAgICAgfQoKICAgICAgLnZvbHVtZS12YWx1ZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtOwogICAgICAgIGNvbG9yOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCAjOWNhM2FmKTsKICAgICAgICBtaW4td2lkdGg6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5pbnN0cnVtZW50LWFjdGlvbnNbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDAuMjVyZW07CiAgICAgICAgbWFyZ2luLXRvcDogMC4yNXJlbTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlciwgIzRiNTU2Myk7CiAgICAgICAgY29sb3I6IHZhcigtLW11dGVkLWZvcmVncm91bmQsICM5Y2EzYWYpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSwgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cy1zbSkpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXTpob3ZlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1yaW5nLCAjNjBhNWZhKTsKICAgICAgICBjb2xvcjogdmFyKC0tcmluZywgIzYwYTVmYSk7CiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXhzLCAwIDFweCAycHggcmdiYSg5NiwgMTY1LCAyNTAsIDAuMikpOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiBzdmdbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CgogICAgICAuc3RlcC1idXR0b25zW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAwLjI1cmVtOwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5zdGVwLWJ1dHRvbltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNDVkZWcsICMyYTM0NDEsICMxZTI1MzApOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpLAogICAgICAgICAgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC42KSwKICAgICAgICAgIDAgMXB4IDJweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgIH0KCiAgICAgIC5zdGVwLWJ1dHRvbltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCAjM2E0NDUxLCAjMmUzNTQwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4zKSwKICAgICAgICAgIDAgM3B4IDZweCByZ2JhKDAsIDAsIDAsIDAuNyksCiAgICAgICAgICAwIDFweCAzcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgfQoKICAgICAgLyogSW5zdHJ1bWVudC1zcGVjaWZpYyBjb2xvcnMgZm9yIGFjdGl2ZSBzdGVwcyB1c2luZyB0aGVtZSB2YXJpYWJsZXMgKi8KICAgICAgLmJlYXQtZ3JpZCAuaW5zdHJ1bWVudC1yb3c6bnRoLWNoaWxkKDIpIC5zdGVwLWJ1dHRvbi5hY3RpdmVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KAogICAgICAgICAgY2lyY2xlLAogICAgICAgICAgdmFyKC0tZGVzdHJ1Y3RpdmUsICNlZjQ0NDQpLAogICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRlc3RydWN0aXZlLCAjZWY0NDQ0KSA3MCUsIGJsYWNrKQogICAgICAgICk7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwKICAgICAgICAgIDAgMCAyMHB4CiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1kZXN0cnVjdGl2ZSwgI2VmNDQ0NCkgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICB9CgogICAgICAuYmVhdC1ncmlkIC5pbnN0cnVtZW50LXJvdzpudGgtY2hpbGQoMykgLnN0ZXAtYnV0dG9uLmFjdGl2ZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoCiAgICAgICAgICBjaXJjbGUsCiAgICAgICAgICB2YXIoLS1jaGFydC0xLCAjM2I4MmY2KSwKICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaGFydC0xLCAjM2I4MmY2KSA3MCUsIGJsYWNrKQogICAgICAgICk7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwKICAgICAgICAgIDAgMCAyMHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaGFydC0xLCAjM2I4MmY2KSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICAgIH0KCiAgICAgIC5iZWF0LWdyaWQgLmluc3RydW1lbnQtcm93Om50aC1jaGlsZCg0KSAuc3RlcC1idXR0b24uYWN0aXZlW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgIGNpcmNsZSwKICAgICAgICAgIHZhcigtLWNoYXJ0LTIsICMxMGI5ODEpLAogICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNoYXJ0LTIsICMxMGI5ODEpIDcwJSwgYmxhY2spCiAgICAgICAgKTsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgaW5zZXQgMCAwIDE1cHggcmdiYSgwLCAwLCAwLCAwLjMpLAogICAgICAgICAgMCAwIDIwcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNoYXJ0LTIsICMxMGI5ODEpIDQwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgfQoKICAgICAgLmJlYXQtZ3JpZCAuaW5zdHJ1bWVudC1yb3c6bnRoLWNoaWxkKDUpIC5zdGVwLWJ1dHRvbi5hY3RpdmVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KAogICAgICAgICAgY2lyY2xlLAogICAgICAgICAgdmFyKC0tY2hhcnQtMywgI2Y1OWUwYiksCiAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY2hhcnQtMywgI2Y1OWUwYikgNzAlLCBibGFjaykKICAgICAgICApOwogICAgICAgIGJveC1zaGFkb3c6CiAgICAgICAgICBpbnNldCAwIDAgMTVweCByZ2JhKDAsIDAsIDAsIDAuMyksCiAgICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY2hhcnQtMywgI2Y1OWUwYikgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICB9CgogICAgICAuYmVhdC1ncmlkIC5pbnN0cnVtZW50LXJvdzpudGgtY2hpbGQoNikgLnN0ZXAtYnV0dG9uLmFjdGl2ZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoCiAgICAgICAgICBjaXJjbGUsCiAgICAgICAgICB2YXIoLS1jaGFydC00LCAjOGI1Y2Y2KSwKICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaGFydC00LCAjOGI1Y2Y2KSA3MCUsIGJsYWNrKQogICAgICAgICk7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwKICAgICAgICAgIDAgMCAyMHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaGFydC00LCAjOGI1Y2Y2KSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICAgIH0KCiAgICAgIC5iZWF0LWdyaWQgLmluc3RydW1lbnQtcm93Om50aC1jaGlsZCg3KSAuc3RlcC1idXR0b24uYWN0aXZlW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgIGNpcmNsZSwKICAgICAgICAgIHZhcigtLWNoYXJ0LTUsICNlYzQ4OTkpLAogICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNoYXJ0LTUsICNlYzQ4OTkpIDcwJSwgYmxhY2spCiAgICAgICAgKTsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgaW5zZXQgMCAwIDE1cHggcmdiYSgwLCAwLCAwLCAwLjMpLAogICAgICAgICAgMCAwIDIwcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNoYXJ0LTUsICNlYzQ4OTkpIDQwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgfQoKICAgICAgLyogRW5oYW5jZWQgY3VycmVudCBzdGVwIHdpdGggaW5zdHJ1bWVudCBjb2xvcnMgKi8KICAgICAgLmluc3RydW1lbnQtcm93IC5zdGVwLWJ1dHRvbi5hY3RpdmUuY3VycmVudFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpOwogICAgICB9CgogICAgICAuaW5zdHJ1bWVudC1yb3c6bnRoLWNoaWxkKDEpIC5zdGVwLWJ1dHRvbi5hY3RpdmUuY3VycmVudFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgaW5zZXQgMHB4IDBweCAxNnB4IDFweCByZ2IoMjU1IDI1NSAyNTUpLAogICAgICAgICAgMCAwIDE2cHggcmdiYSgyMzksIDY4LCA2OCwgMC44KTsKICAgICAgICBtaXgtYmxlbmQtbW9kZTogc2NyZWVuOwogICAgICB9CgogICAgICAuaW5zdHJ1bWVudC1yb3c6bnRoLWNoaWxkKDIpIC5zdGVwLWJ1dHRvbi5hY3RpdmUuY3VycmVudFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgaW5zZXQgMHB4IDBweCAxNnB4IDFweCByZ2IoMjU1IDI1NSAyNTUpLAogICAgICAgICAgMCAwIDE2cHggcmdiYSg1OSwgMTMwLCAyNDYsIDAuOCk7CiAgICAgICAgbWl4LWJsZW5kLW1vZGU6IHNjcmVlbjsKICAgICAgfQoKICAgICAgLmluc3RydW1lbnQtcm93Om50aC1jaGlsZCgzKSAuc3RlcC1idXR0b24uYWN0aXZlLmN1cnJlbnRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDBweCAwcHggMTZweCAxcHggcmdiKDI1NSAyNTUgMjU1KSwKICAgICAgICAgIDAgMCAxNnB4IHJnYmEoMTYsIDE4NSwgMTI5LCAwLjgpOwogICAgICAgIG1peC1ibGVuZC1tb2RlOiBzY3JlZW47CiAgICAgIH0KCiAgICAgIC5pbnN0cnVtZW50LXJvdzpudGgtY2hpbGQoNCkgLnN0ZXAtYnV0dG9uLmFjdGl2ZS5jdXJyZW50W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGJveC1zaGFkb3c6CiAgICAgICAgICBpbnNldCAwcHggMHB4IDE2cHggMXB4IHJnYigyNTUgMjU1IDI1NSksCiAgICAgICAgICAwIDAgMTZweCByZ2JhKDI0NSwgMTU4LCAxMSwgMC44KTsKICAgICAgICBtaXgtYmxlbmQtbW9kZTogc2NyZWVuOwogICAgICB9CgogICAgICAuaW5zdHJ1bWVudC1yb3c6bnRoLWNoaWxkKDUpIC5zdGVwLWJ1dHRvbi5hY3RpdmUuY3VycmVudFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgaW5zZXQgMHB4IDBweCAxNnB4IDFweCByZ2IoMjU1IDI1NSAyNTUpLAogICAgICAgICAgMCAwIDE2cHggcmdiYSgxMzksIDkyLCAyNDYsIDAuOCk7CiAgICAgICAgbWl4LWJsZW5kLW1vZGU6IHNjcmVlbjsKICAgICAgfQoKICAgICAgLmluc3RydW1lbnQtcm93Om50aC1jaGlsZCg2KSAuc3RlcC1idXR0b24uYWN0aXZlLmN1cnJlbnRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDBweCAwcHggMTZweCAxcHggcmdiKDI1NSAyNTUgMjU1KSwKICAgICAgICAgIDAgMCAxNnB4IHJnYmEoMjM2LCA3MiwgMTUzLCAwLjgpOwogICAgICAgIG1peC1ibGVuZC1tb2RlOiBzY3JlZW47CiAgICAgIH0KCiAgICAgIC5zdGVwLWJ1dHRvbi5jdXJyZW50W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgaW5zZXQgMCAwIDEycHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLAogICAgICAgICAgMCAwIDI1cHggdmFyKC0tcmluZywgIzYwYTVmYSksCiAgICAgICAgICAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC45KTsKICAgICAgfQoKICAgICAgLnN0ZXAtYnV0dG9uLmJlYXQtbWFya2VyW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCB2YXIoLS1yaW5nLCAjZjU5ZTBiKTsKICAgICAgfQoKICAgICAgLnN0ZXAtYnV0dG9uLmFjdGl2ZS5jdXJyZW50W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xNSk7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgIGluc2V0IDAgMCAyMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKSwKICAgICAgICAgIDAgMCAzMHB4IGN1cnJlbnRDb2xvciwKICAgICAgICAgIDAgNHB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjkpOwogICAgICAgIGFuaW1hdGlvbjogY3VycmVudC1wdWxzZS1kYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTEgMC44cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY3VycmVudC1wdWxzZS1kYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTEgewogICAgICAgIDAlIHsKICAgICAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4zKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIEVuaGFuY2VkIEZvb3RlciAqLwogICAgICAuYmVhdC1tYWtlci1mb290ZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZvb3Rlci1pbmZvW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDFyZW07CiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgICB9CgogICAgICAua2l0LWluZm9bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSwKICAgICAgLnBhdHRlcm4taW5mb1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgIzljYTNhZik7CiAgICAgIH0KCiAgICAgIC5zdGF0dXMtcGxheWluZ1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAwLjM3NXJlbTsKICAgICAgICBjb2xvcjogdmFyKC0tY2hhcnQtMiwgIzEwYjk4MSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQoKICAgICAgLnN0YXR1cy1zdG9wcGVkW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgIGNvbG9yOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCAjNjQ3NDhiKTsKICAgICAgfQoKICAgICAgLnB1bHNlLWRvdFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXJ0LTIsICMxMGI5ODEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHB1bHNlLWRhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MSAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICB9CgogICAgICAuc3Itb25seVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogLTFweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlLWRhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MSB7CiAgICAgICAgMCUsCiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIFJlc3BvbnNpdmUgRGVzaWduICovCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5iZWF0LW1ha2VyLWNhcmRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgICBwYWRkaW5nOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLmJlYXQtbWFrZXItaGVhZGVyW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgICAgICAgZ2FwOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLmhlYWRlci1jb250cm9sc1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICB9CgogICAgICAgIC5jb250cm9sLWdyb3VwW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgICAgbWluLXdpZHRoOiA2MHB4OwogICAgICAgIH0KCiAgICAgICAgLnNsaWRlcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICAgIHdpZHRoOiA1MHB4OwogICAgICAgIH0KCiAgICAgICAgLmluc3RydW1lbnQtY29udHJvbHNbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgICB3aWR0aDogMTQwcHg7CiAgICAgICAgfQoKICAgICAgICAuc3RlcC1idXR0b25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB9CgogICAgICAgIC8qIE1vYmlsZSBQYXR0ZXJuIExpYnJhcnkgKi8KICAgICAgICAucHJlc2V0cy1zZWN0aW9uW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgICAgcGFkZGluZzogMC41cmVtOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTsKICAgICAgICB9CgogICAgICAgIC5wcmVzZXRzLWhlYWRlcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zNzVyZW07CiAgICAgICAgfQoKICAgICAgICAucHJlc2V0cy1sYWJlbFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC42MjVyZW07CiAgICAgICAgfQoKICAgICAgICAucGF0dGVybnMtY291bnRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNXJlbTsKICAgICAgICAgIHBhZGRpbmc6IDAuMDYyNXJlbSAwLjI1cmVtOwogICAgICAgIH0KCiAgICAgICAgLnByZXNldC1idXR0b25zW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgICAgZ2FwOiAwLjM3NXJlbTsKICAgICAgICAgIG1heC1oZWlnaHQ6IDUwcHg7CiAgICAgICAgfQoKICAgICAgICAucHJlc2V0LWJ1dHRvbltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdIHsKICAgICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgICBwYWRkaW5nOiAwLjM3NXJlbSAwLjVyZW07CiAgICAgICAgfQoKICAgICAgICAucHJlc2V0LW5hbWVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtOwogICAgICAgIH0KCiAgICAgICAgLnByZXNldC1nZW5yZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTI1ZWQ1MWUwOTFdLAogICAgICAgIC5wcmVzZXQtYnBtW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgICAgZm9udC1zaXplOiAwLjQzNzVyZW07CiAgICAgICAgICBwYWRkaW5nOiAwLjA2MjVyZW0gMC4xODc1cmVtOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgICAgICAgLnByZXNldC1idXR0b25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgICBtaW4td2lkdGg6IDkwcHg7CiAgICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuMzc1cmVtOwogICAgICAgIH0KCiAgICAgICAgLnByZXNldC1uYW1lW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgICAgZm9udC1zaXplOiAwLjU2MjVyZW07CiAgICAgICAgfQoKICAgICAgICAucGF0dGVybnMtY291bnRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0yNWVkNTFlMDkxXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNDM3NXJlbTsKICAgICAgICAgIHBhZGRpbmc6IDAuMDYyNXJlbSAwLjE4NzVyZW07CiAgICAgICAgfQogICAgICB9CgogICAgICAvKiBMYXJnZSBzY3JlZW4gb3B0aW1pemF0aW9ucyAqLwogICAgICBAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgICAgICAgLnByZXNldC1idXR0b25zW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMjVlZDUxZTA5MV0gewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMjBweDsKICAgICAgICB9CiAgICAgIH0KICAgIA%3D%3D.glimmer-scoped.css"; +import "./beat-maker.gts.CiAgICAgICAgLmZpdHRlZC1jb250YWluZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBjb250YWluZXItdHlwZTogc2l6ZTsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgfQoKICAgICAgICAvKiBIaWRlIGFsbCBieSBkZWZhdWx0ICovCiAgICAgICAgLmJhZGdlLWZvcm1hdFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdLAogICAgICAgIC5zdHJpcC1mb3JtYXRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSwKICAgICAgICAudGlsZS1mb3JtYXRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSwKICAgICAgICAuY2FyZC1mb3JtYXRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBwYWRkaW5nOiBjbGFtcCgwLjE4NzVyZW0sIDIlLCAwLjYyNXJlbSk7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBmMTcyYSAwJSwgIzFlMjkzYiAxMDAlKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCwgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cy14bCkpOwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CgogICAgICAgIC8qIEJhZGdlIEZvcm1hdCAo4omkMTUwcHggd2lkdGgsIOKJpDE2OXB4IGhlaWdodCkgKi8KICAgICAgICBAY29udGFpbmVyIChtYXgtd2lkdGg6IDE1MHB4KSBhbmQgKG1heC1oZWlnaHQ6IDE2OXB4KSB7CiAgICAgICAgICAuYmFkZ2UtZm9ybWF0W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLmJhZGdlLWNvbnRlbnRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMC41cmVtOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQoKICAgICAgICAuYmFkZ2UtaWNvbltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAuYmVhdC1ncmlkLW1pbmlbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgOHB4KTsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KDIsIDhweCk7CiAgICAgICAgICBnYXA6IDJweDsKICAgICAgICB9CgogICAgICAgIC5iZWF0LWRvdFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjQ1LCAxNTgsIDExLCAwLjMpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhzLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLXhzKSk7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLmJlYXQtZG90LmFjdGl2ZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmNTllMGI7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4IHJnYmEoMjQ1LCAxNTgsIDExLCAwLjYpOwogICAgICAgICAgYW5pbWF0aW9uOiBiZWF0LXB1bHNlLWRhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMSAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBiZWF0LXB1bHNlLWRhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMSB7CiAgICAgICAgICAwJSwKICAgICAgICAgIDEwMCUgewogICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgfQogICAgICAgICAgNTAlIHsKICAgICAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLmJhZGdlLWluZm9bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIH0KCiAgICAgICAgLmJhZGdlLXRpdGxlW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgIGNvbG9yOiAjZjU5ZTBiOwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuMTI1cmVtOwogICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB9CgogICAgICAgIC5iYWRnZS1zdGF0c1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC42MjVyZW07CiAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgfQoKICAgICAgICAvKiBTdHJpcCBGb3JtYXQgKDE1MXB4LTM5OXB4IHdpZHRoLCDiiaQxNjlweCBoZWlnaHQpICovCiAgICAgICAgQGNvbnRhaW5lciAobWluLXdpZHRoOiAxNTFweCkgYW5kIChtYXgtaGVpZ2h0OiAxNjlweCkgewogICAgICAgICAgLnN0cmlwLWZvcm1hdFtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC5zdHJpcC1jb250ZW50W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDFyZW07CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB9CgogICAgICAgIC5zdHJpcC12aXN1YWxbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC5iZWF0LXZpc3VhbGl6ZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICB9CgogICAgICAgIC5iZWF0LWJhcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIHdpZHRoOiA0cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC4zKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cywgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cy14cykpOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgICAgICB9CgogICAgICAgIC5iZWF0LWJhcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdOm50aC1jaGlsZCgxKSB7CiAgICAgICAgICBoZWlnaHQ6IDYwJTsKICAgICAgICB9CiAgICAgICAgLmJlYXQtYmFyW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV06bnRoLWNoaWxkKDIpIHsKICAgICAgICAgIGhlaWdodDogMzAlOwogICAgICAgIH0KICAgICAgICAuYmVhdC1iYXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXTpudGgtY2hpbGQoMykgewogICAgICAgICAgaGVpZ2h0OiA4MCU7CiAgICAgICAgfQogICAgICAgIC5iZWF0LWJhcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdOm50aC1jaGlsZCg0KSB7CiAgICAgICAgICBoZWlnaHQ6IDQwJTsKICAgICAgICB9CiAgICAgICAgLmJlYXQtYmFyW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV06bnRoLWNoaWxkKDUpIHsKICAgICAgICAgIGhlaWdodDogNzAlOwogICAgICAgIH0KCiAgICAgICAgLmJlYXQtYmFyLmFjdGl2ZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmNTllMGI7CiAgICAgICAgICBhbmltYXRpb246IGJhci1wdWxzZS1kYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTEgMS4ycyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgYmFyLXB1bHNlLWRhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMSB7CiAgICAgICAgICAwJSwKICAgICAgICAgIDEwMCUgewogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWSgxKTsKICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIH0KICAgICAgICAgIDUwJSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDEuNCk7CiAgICAgICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC5zdHJpcC1pbmZvW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICB9CgogICAgICAgIC5zdHJpcC10aXRsZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgY29sb3I6ICNmNTllMGI7CiAgICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbTsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgfQoKICAgICAgICAuc3RyaXAtZGVzY3JpcHRpb25bZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNzVyZW07CiAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgfQoKICAgICAgICAuc3RyaXAtYmFkZ2VbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMC4yNXJlbTsKICAgICAgICAgIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZjQ0NDQ7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMsIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMpKTsKICAgICAgICAgIGZvbnQtc2l6ZTogMC42MjVyZW07CiAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgY29sb3I6ICNlZjQ0NDQ7CiAgICAgICAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAucmVjLWluZGljYXRvcltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIHdpZHRoOiA2cHg7CiAgICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlZjQ0NDQ7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICBhbmltYXRpb246IHJlYy1wdWxzZS1kYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTEgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIHJlYy1wdWxzZS1kYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTEgewogICAgICAgICAgMCUsCiAgICAgICAgICAxMDAlIHsKICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgIH0KICAgICAgICAgIDUwJSB7CiAgICAgICAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyogVGlsZSBGb3JtYXQgKOKJpDM5OXB4IHdpZHRoLCDiiaUxNzBweCBoZWlnaHQpICovCiAgICAgICAgQGNvbnRhaW5lciAobWF4LXdpZHRoOiAzOTlweCkgYW5kIChtaW4taGVpZ2h0OiAxNzBweCkgewogICAgICAgICAgLnRpbGUtZm9ybWF0W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLnRpbGUtaGVhZGVyW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgaGVpZ2h0OiA3MHB4OwogICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2Y1OWUwYiAwJSwgI2Y5NzMxNiAxMDAlKTsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLWxnKSk7CiAgICAgICAgfQoKICAgICAgICAuc2VxdWVuY2VyLWdyaWRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogM3B4OwogICAgICAgIH0KCiAgICAgICAgLnNlcS1yb3dbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAzcHg7CiAgICAgICAgfQoKICAgICAgICAuc2VxLXN0ZXBbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICB3aWR0aDogOHB4OwogICAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteHMsIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMteHMpKTsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuc2VxLXN0ZXAuYWN0aXZlW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDRweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgICAgfQoKICAgICAgICAudGlsZS1iYWRnZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogMC41cmVtOwogICAgICAgICAgcmlnaHQ6IDAuNXJlbTsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiAwLjI1cmVtOwogICAgICAgICAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cywgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cykpOwogICAgICAgICAgZm9udC1zaXplOiAwLjYyNXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIH0KCiAgICAgICAgLmxpdmUtZG90W2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICAgIGhlaWdodDogNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogIzIyZDNlZTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgIGFuaW1hdGlvbjogbGl2ZS1wdWxzZS1kYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTEgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIGxpdmUtcHVsc2UtZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExIHsKICAgICAgICAgIDAlLAogICAgICAgICAgMTAwJSB7CiAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICB9CiAgICAgICAgICA1MCUgewogICAgICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC50aWxlLWNvbnRlbnRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDFyZW07CiAgICAgICAgfQoKICAgICAgICAudGlsZS10aXRsZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgICAgfQoKICAgICAgICAudGlsZS1zcGVjc1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAwLjVyZW07CiAgICAgICAgfQoKICAgICAgICAuc3BlYy1yb3dbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5zcGVjLWxhYmVsW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgfQoKICAgICAgICAuc3BlYy12YWx1ZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIH0KCiAgICAgICAgLnRpbGUtZmVhdHVyZXNbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiAwLjM3NXJlbTsKICAgICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgICAgfQoKICAgICAgICAuZmVhdHVyZS10YWdbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjQ1LCAxNTgsIDExLCAwLjIpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Y1OWUwYjsKICAgICAgICAgIGNvbG9yOiAjZjU5ZTBiOwogICAgICAgICAgZm9udC1zaXplOiAwLjYyNXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20sIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMtc20pKTsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgfQoKICAgICAgICAvKiBDYXJkIEZvcm1hdCAo4omlNDAwcHggd2lkdGgsIOKJpTE3MHB4IGhlaWdodCkgKi8KICAgICAgICBAY29udGFpbmVyIChtaW4td2lkdGg6IDQwMHB4KSBhbmQgKG1pbi1oZWlnaHQ6IDE3MHB4KSB7CiAgICAgICAgICAuY2FyZC1mb3JtYXRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAuY2FyZC1oZWFkZXJbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmNTllMGIgMCUsICNmOTczMTYgMTAwJSk7CiAgICAgICAgICBwYWRkaW5nOiAxcmVtOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLWxnKSk7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgICAgIH0KCiAgICAgICAgLmNhcmQtaW5mb1tkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgfQoKICAgICAgICAuY2FyZC10aXRsZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICBtYXJnaW46IDAgMCAwLjVyZW0gMDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgICAgfQoKICAgICAgICAuY2FyZC1kZXNjcmlwdGlvbltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgICB9CgogICAgICAgIC5kcnVtLW1hY2hpbmVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMC41cmVtOwogICAgICAgICAgcGFkZGluZzogMC43NXJlbTsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC43KTsKICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzLWxnKSk7CiAgICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIH0KCiAgICAgICAgLm1hY2hpbmUtZGlzcGxheVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICMwZjE3MmE7CiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20sIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMtc20pKTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjQ1LCAxNTgsIDExLCAwLjMpOwogICAgICAgIH0KCiAgICAgICAgLmRpc3BsYXktbGluZVtkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbTsKICAgICAgICB9CgogICAgICAgIC5kaXNwbGF5LWxpbmVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXTpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQoKICAgICAgICAucGFyYW0tbGFiZWxbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtOwogICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgfQoKICAgICAgICAucGFyYW0tdmFsdWVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNzVyZW07CiAgICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIH0KCiAgICAgICAgLm1hY2hpbmUtY29udHJvbHNbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgZ2FwOiAwLjI1cmVtOwogICAgICAgIH0KCiAgICAgICAgLmNvbnRyb2wta25vYltkYXRhLXNjb3BlZGNzcy01OGRjMmUzOTdiLTFkYmI3ODQ2MTFdIHsKICAgICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogIzM3NDE1MTsKICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNmNTllMGI7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfQoKICAgICAgICAuY29udHJvbC1rbm9iW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV06OmFmdGVyIHsKICAgICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgdG9wOiAycHg7CiAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICAgICAgICB3aWR0aDogMnB4OwogICAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjU5ZTBiOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXh4cywgdmFyKC0tYm94ZWwtYm9yZGVyLXJhZGl1cy14eHMpKTsKICAgICAgICB9CgogICAgICAgIC5jYXJkLWdyaWRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTsKICAgICAgICAgIGdhcDogMXJlbTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuMSk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIHZhcigtLWJveGVsLWJvcmRlci1yYWRpdXMtbGcpKTsKICAgICAgICAgIHBhZGRpbmc6IDFyZW07CiAgICAgICAgfQoKICAgICAgICAuZ3JpZC1zZWN0aW9uW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLnNlY3Rpb24tdGl0bGVbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBmb250LXNpemU6IDAuNzVyZW07CiAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIH0KCiAgICAgICAgLnBhdHRlcm4tY291bnRbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIH0KCiAgICAgICAgLmNhcmQtZmVhdHVyZXNbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICAgIH0KCiAgICAgICAgLmZlYXR1cmVzLWxhYmVsW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtOwogICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07CiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICB9CgogICAgICAgIC5mZWF0dXJlLWxpc3RbZGF0YS1zY29wZWRjc3MtNThkYzJlMzk3Yi0xZGJiNzg0NjExXSB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiAwLjVyZW07CiAgICAgICAgfQoKICAgICAgICAuZmVhdHVyZS1waWxsW2RhdGEtc2NvcGVkY3NzLTU4ZGMyZTM5N2ItMWRiYjc4NDYxMV0gewogICAgICAgICAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTsKICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmNTllMGIgMCUsICNmOTczMTYgMTAwJSk7CiAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICBmb250LXNpemU6IDAuNzVyZW07CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLCB2YXIoLS1ib3hlbC1ib3JkZXItcmFkaXVzKSk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgfQogICAgICA%3D.glimmer-scoped.css"; +export class DrumKitField extends FieldDef { + static displayName = 'Drum Kit'; + static icon = MusicIcon; + static { + dt7948.g(this.prototype, "kitName", [field], function () { + return contains(StringField); + }); + } + #kitName = (dt7948.i(this, "kitName"), void 0); + static { + dt7948.g(this.prototype, "kickParams", [field], function () { + return contains(StringField); + }); + } + #kickParams = (dt7948.i(this, "kickParams"), void 0); + static { + dt7948.g(this.prototype, "snareParams", [field], function () { + return contains(StringField); + }); + } + #snareParams = (dt7948.i(this, "snareParams"), void 0); + static { + dt7948.g(this.prototype, "hihatParams", [field], function () { + return contains(StringField); + }); + } + #hihatParams = (dt7948.i(this, "hihatParams"), void 0); + static { + dt7948.g(this.prototype, "openhatParams", [field], function () { + return contains(StringField); + }); + } + #openhatParams = (dt7948.i(this, "openhatParams"), void 0); + static { + dt7948.g(this.prototype, "clapParams", [field], function () { + return contains(StringField); + }); + } + #clapParams = (dt7948.i(this, "clapParams"), void 0); + static { + dt7948.g(this.prototype, "crashParams", [field], function () { + return contains(StringField); + }); + } + #crashParams = (dt7948.i(this, "crashParams"), void 0); + // ⁹⁰ Parse sound parameters from JSON strings + get soundParams() { + try { + return { + kick: JSON.parse(this.kickParams || '{"type": "808", "frequency": 60, "decay": 0.3}'), + snare: JSON.parse(this.snareParams || '{"type": "808", "frequency": 200, "decay": 0.1}'), + hihat: JSON.parse(this.hihatParams || '{"type": "808", "frequency": 8000, "decay": 0.05}'), + openhat: JSON.parse(this.openhatParams || '{"type": "808", "frequency": 6000, "decay": 0.3}'), + clap: JSON.parse(this.clapParams || '{"type": "808", "frequency": 2000, "decay": 0.1}'), + crash: JSON.parse(this.crashParams || '{"type": "808", "frequency": 3000, "decay": 1.0}') + }; + } catch (e) { + console.error('Error parsing sound parameters:', e); + return { + kick: { + type: '808', + frequency: 60, + decay: 0.3 + }, + snare: { + type: '808', + frequency: 200, + decay: 0.1 + }, + hihat: { + type: '808', + frequency: 8000, + decay: 0.05 + }, + openhat: { + type: '808', + frequency: 6000, + decay: 0.3 + }, + clap: { + type: '808', + frequency: 2000, + decay: 0.1 + }, + crash: { + type: '808', + frequency: 3000, + decay: 1.0 + } + }; + } + } + static embedded = class Embedded extends Component { + static { + setComponentTemplate(createTemplateFactory( + /* + +
{{@model.description}}
+ {{/if}} + + {{#if @fields.kit}} +{{@model.description}}
+ {{/if}} + + {{#if @fields.kit}} +{{@model.description}}
+ {{/if}} + + {{#if @fields.pattern}} +Professional drum machine with dynamic + synthesis and pattern sequencing
+